首页 文章 精选 留言 我的

精选列表

搜索[腾讯混元生3D],共10000篇文章
优秀的个人博客,低调大师

DriveScale:为初始者混搭服务器和存储

DriveScale是一家初创公司,今年年初从此前3年的隐身模式走出来,推出了可以动态地将外部连接的JBOD作为本地设备呈现给服务器的硬件和软件。它的想法是提供可组合的服务器-存储结合体,用于改变Hadoop类型的分布式工作负载。 这么做的目的是分享超大规模数据中心的特性,而不涉及到这么大规模,也不需要企业进行DIY。DriveScale表示,现有的服务器和存储产品设计对于分布式Hadoop类型的工作负载来说太死板了,通常存在不同程度的配置不足或者过量配置服务器和存储资源。 服务器和存储应该作为单独的资源池进行管理。据悉,DriveScale公司有很多前Sun和思科公司的员工,有不错的可信度,值得考虑。 技术 软件构成系统:这是带有本地(在机架中)磁盘存储的服务器,当大数据Hadoop工作负载发生变化的时候可以分解,然后可以重新组合成为新的配置。 它所做的是,DriveScale软件对磁盘驱动器机箱中的存储进行虚拟化,然后跨10GbitE连接呈现给机架中的服务器。此外有一个机架顶部的以太网交换机,服务器和SAS JBOD存储机箱有以太网端口。采用SAS的DriveScale适配器(虚拟化卡)是介于服务器和存储以太网端口之间的。 该适配器采用一个以太网控制器(2 x 10GbitE)以及一个SAS(2 x 12Gbit/s 4通道)控制器。一个1U的DriveScale一体机设备容纳4个这样的适配卡,连接到TOR以太网交换机。这个适配卡机箱有80Gbit/s的带宽。服务器访问磁盘是通过这个以太网和DriveScale系统的。显然这个以太网和SAS连接为磁盘访问贡献了一些延迟,大约是200微秒。 该服务器运行Linux系统,有一个DriveScale软件代理。DriveScale有一个管理工具,用于组合(配置或者分配)存储给一台或者多台服务器,配置软件代理。 这个代理呈现已经被组合成为服务器的存储,本地(直连)到这个服务器,使用DriveScale服务器代理以及适配卡,隐藏了它实际上是通过以太网外部连接的事实。 还有一个SaaS整体管理工具。用户通过GUI或者RESTful API控制DriveScale。JBOD未来还可以涵盖SSD。 创建、创始人和资金 DriveScale在2013年由首席科学家Tom Lyon和首席执行官Satya Nishtala创建的时候,接收到了300万美元的种子资金。Lyon最早是Sun公司的员工,他和Nishtala当时为Banman工作。他们是Nuovo的创始人,这个分拆出来的公司开发了思科的UCS服务器。在Sun的时候,Lyon致力于Sparc处理器的设计以及SunOS,而Nishyala则负责Sun存储、UltraSparc工作组服务器以及工作站产品。 DriveScale公司的首席执行官是Gene Banman,工程师设计副总裁是Duane Northcutt,他是前Sun公司的硬件架构师。前Sun首席执行官和共同创始人Scott McNealy以及研究Java的James Gosling是该公司咨询顾问。 该公司今年年初进行了1500万美元的A轮融资,由Pelion Venture Parnters主导,Nautilus Venture Partners以及Foxconn的Ingrasys参与。Ingrasys是Foxconn的全资子公司,帮助开发和制造DriveScale一体机。 DriveScale称,现在是解耦设计的一个好时机。它的技术可以让企业拥有类似互联网公司(Amazon、Facebook和Google等)的那种横向扩展架构,让他们更加灵活地扩展服务器和存储资源。 原文发布时间为:2016年6月27日 本文来自云栖社区合作伙伴至顶网,了解相关信息可以关注至顶网。

优秀的个人博客,低调大师

一个线程,从“生”到“死”经历的过程

本文分享自华为云社区《面试必问 | 一个线程从创建到消亡要经历哪些阶段?》,作者: 冰 河。 今天,我们就结合操作系统线程和编程语言线程再次深入探讨线程的生命周期问题,线程的生命周期其实没有我们想象的那么简单!! 理解线程的生命周期本质上理解了生命周期中各个节点的状态转换机制就可以了。接下来,我们分别就通用线程生命周期和Java语言的线程生命周期分别进行详细说明。 通用的线程生命周期 通用的线程生命周期总体上可以分为五个状态:初始状态、可运行状态、运行状态、休眠状态和终止状态。 我们可以简单的使用下图来表示这五种状态。 初始状态 线程已经被创建,但是不允许分配CPU执行。需要注意的是:这个状态属于编程语言特有,这里指的线程已经被创建,仅仅指在编程语言中被创建,在操作系统中,并没有创建真正的线程。 可运行状态 线程可以分配CPU执行。此时,操作系统中的线程被成功创建,可以分配CPU执行。 运行状态 当操作系统中存在空闲的CPU,操作系统会将这个空闲的CPU分配给一个处于可运行状态的线程,被分配到CPU的线程的状态就转换成了运行状态 休眠状态 运行状态的线程调用一个阻塞的API(例如,以阻塞的方式读文件)或者等待某个事件(例如,等待某个条件变量等),线程的状态就会转换到休眠状态。**此时线程会释放CPU资源,休眠状态的线程没有机会获得CPU的使用权。**一旦等待的条件出现,线程就会从休眠状态转换到可运行状态。 终止状态 线程执行完毕或者出现异常就会进入终止状态,终止状态的线程不会切换到其他任何状态,这也意味着线程的生命周期结束了。 以上就是通用的线程生命周期,下面,我们再看对比看下Java语言中的线程生命周期。 Java中的线程生命周期 Java中的线程生命周期总共可以分为六种状态:初始化状态(NEW)、可运行/运行状态(RUNNABLE)、阻塞状态(BLOCKED)、无时限等待状态(WAITING)、有时限等待状态(TIMED_WAITING)、终止状态(TERMINATED)。 需要大家重点理解的是:虽然Java语言中线程的状态比较多,但是,其实在操作系统层面,Java线程中的阻塞状态(BLOCKED)、无时限等待状态(WAITING)、有时限等待状态(TIMED_WAITING)都是一种状态,即通用线程生命周期中的休眠状态。也就是说,只要Java中的线程处于这三种状态时,那么,这个线程就没有CPU的使用权。 理解了这些之后,我们就可以使用下面的图来简单的表示Java中线程的生命周期。 我们也可以这样理解阻塞状态(BLOCKED)、无时限等待状态(WAITING)、有时限等待状态(TIMED_WAITING),它们是导致线程休眠的三种原因! 接下来,我们就看看Java线程中的状态是如何转化的。 RUNNABLE与BLOCKED的状态转换 只有一种场景会触发这种转换,就是线程等待synchronized隐式锁。synchronized修饰的方法、代码块同一时刻只允许一个线程执行,其他的线程则需要等待。 此时,等待的线程就会从RUNNABLE状态转换到BLOCKED状态。当等待的线程获得synchronized隐式锁时,就又会从BLOCKED状态转换到RUNNABLE状态。 这里,需要大家注意:线程调用阻塞API时,在操作系统层面,线程会转换到休眠状态。但是在JVM中,Java线程的状态不会发生变化,也就是说,Java线程的状态仍然是RUNNABLE状态。 JVM并不关心操作系统调度相关的状态,在JVM角度来看,等待CPU使用权(操作系统中的线程处于可执行状态)和等待IO操作(操作系统中的线程处于休眠状态)没有区别,都是在等待某个资源,所以,将其都归入了RUNNABLE状态。 我们平时所说的Java在调用阻塞API时,线程会阻塞,指的是操作系统线程的状态,并不是Java线程的状态。 RUNNABLE与WAITING状态转换 线程从RUNNABLE状态转换成WAITING状态总体上有三种场景。 场景一 获得synchronized隐式锁的线程,调用无参的Object.wait()方法。此时的线程会从RUNNABLE状态转换成WAITING状态。 场景二 调用无参数的Thread.join()方法。其中join()方法是一种线程的同步方法。例如,在threadA线程中调用threadB线程的join()方法,则threadA线程会等待threadB线程执行完。 而threadA线程在等待threadB线程执行的过程中,其状态会从RUNNABLE转换到WAITING。当threadB执行完毕,threadA线程的状态则会从WAITING状态转换成RUNNABLE状态。 场景三 调用LockSupport.park()方法,当前线程会阻塞,线程的状态会从RUNNABLE转换成WAITING。 调用LockSupport.unpark(Thread thread)可唤醒目标线程,目标线程的状态又会从WAITING状态转换到RUNNABLE。 RUNNABLE与TIMED_WAITING状态转换 总体上可以分为五种场景。 场景一 调用带超时参数的Thread.sleep(long millis)方法; 场景二 获得synchronized隐式锁的线程,调用带超时参数的Object.wait(long timeout)参数; 场景三 调用带超时参数的Thread.join(long millis)方法; 场景四 调用带超时参数的LockSupport.parkNanos(Object blocker, long deadline)方法; 场景五 调用带超时参数的LockSuppor.parkUntil(long deadline)方法。 从NEW到RUNNABLE状态 Java刚创建出来的Thread对象就是NEW状态,创建Thread对象主要有两种方法,一种是继承Thread对象,重写run()方法;另一种是实现Runnable接口,重写run()方法。 注意:这里说的是创建Thread对象的方法,而不是创建线程的方法,创建线程的方法包含创建Thread对象的方法。 继承Thread对象 public class ChildThread extends Thread{ @Override public void run(){ //线程中需要执行的逻辑 } } //创建线程对象 ChildThread childThread = new ChildThread(); 实现Runnable接口 public class ChildRunnable implements Runnable{ @Override public void run(){ //线程中需要执行的逻辑 } } //创建线程对象 Thread childThread = new Thread(new ChildRunnable()); 处于NEW状态的线程不会被操作系统调度,因此也就不会执行。Java中的线程要执行,就需要转换到RUNNABLE状态。从NEW状态转换到RUNNABLE状态,只需要调用线程对象的start()方法即可。 //创建线程对象 Thread childThread = new Thread(new ChildRunnable()); //调用start()方法使线程从NEW状态转换到RUNNABLE状态 childThread.start(); RUNNABLE到TERMINATED状态 线程执行完run()方法后,或者执行run()方法的时候抛出异常,都会终止,此时为TERMINATED状态。如果我们需要中断run()方法,可以调用interrupt()方法。 点击关注,第一时间了解华为云新鲜技术~

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册