首页天道酬勤java创建队列,java中的队列有哪些

java创建队列,java中的队列有哪些

张世龙 05-04 18:01 23次浏览

另一方面,SMP和NUMA是1.1 SMPS对称多进程(SMPS MP )包括硬件和软件的多核计算机架构,两个或多个相同的核共享一个主内存虽然某些组件(如内存)具有在核心之间共享和确保一致性的优点,但由于内存一致性和对象共享,可扩展性受到限制。

下图显示了SMP体系结构。

1.2非统一存储器访问(numa numa )不一致存储访问也是一种用于多任务处理的计算机存储设计,每个内核具有相应的本地内存,每个内核之间通过互连在此体系结构中,内存访问事件取决于内存地址和特定内核的相对地址。 在NUMA中,核心访问自己的本地内存比访问非本地内存(另一个核心的本地内存或核心之间的共享内存)快。 NUMA的优点仅限于特定任务,特别是数据与特定任务或用户具有强相关性的服务。 SMP扩展问题已得到解决,但内核数量较大时,内核访问非本地内存的开销较大,性能提高速度较慢。

下图显示了NUMA体系结构。

二. CLH队列锁定2.1概述在共享内存多处理器环境中,保持共享数据结构的逻辑完整性是一个普遍问题。 用锁保护这些数据结构是维持这种一致性的标准技术。 需要访问数据的进程(以下进程、线程和进程都可以视为概念,同时运行的程序单元)必须首先获得与此数据对应的锁定。 一旦获得锁定,进程就会独占对此数据的访问权限,并知道要解除锁定。 所有请求锁定的进程都必须等待。 如果拥有锁定的进程解除锁定,则等待的进程之一将获得锁定,其他进程将等待。

等待进程的方法也有两种:被动等待(让CPU )或主动等待(自旋)。 被动等待是指进程注册并阻止对锁定的请求,并允许其他进程在等待期间使用该处理器。 解除锁定后,其中一个注册的进程将获得锁定。 选定的进程将在时间表准备就绪时解除阻止并运行。 积极等待的最典型的情况是,进程进入一个试图重复检测锁定状态和/或获取锁定对象的紧凑循环(tight loop )。 获取锁定对象后,它将进入受保护的数据可执行文件。

直观上,旋转是指CPU正在空闲,这无疑浪费了比等待数据块更大的性能,但实际上在小任务中空闲时间更短,锁定很快就会释放。 与数据块方法在流程状态管理和切换中不可忽视的开销相比,旋转的成本要比数据块和恢复过程小。 CLH锁是自旋锁这种被动方式的实践。

队列旋转锁定的一个潜在优点是等待进程不在同一内存地址旋转。 NUMA还可以在与每个进程处理的核心相对应的本地内存上旋转,从而减少核心和内存之间的互连负担。 当某些等待进程在某个时间对锁定有很高的竞争力时,这一点尤为重要。 另外,队列自旋锁可以在FIFO队列中保证过程的某种公平性和避免饥饿。

2.2 CLH队列锁定中的结构(FIFO队列)我们面对的基本上是SMP体系结构的系统,但这里只分析对最基础FIFO队列的锁定,而对优先队列锁定和NUMA系统的锁定

总体结构如下。

Request :对锁定的要求。 包括状态状态。 (授权表示可以允许对他的监视进程进行锁定,Pending表示他的监视进程必须挂起并等待) Lock :锁定对象在初始化时具有state=G的请求Process锁定这两个请求指针是myreq和watch,myreq指向对应于当前进程的锁定请求,如果该进程获取锁定或获取锁定但未释放,则myreq.state=P; 当进程解除锁定时,myreq.state=G。 watch指向前驱过程的myreq请求,并监听其状态变化。 队列锁定的工作过程如下:

在初始状态下,要锁定的L.tail指向状态g的Request R0,然后进程请求锁定,P.myreq指向状态p的Request,同时在队列末尾插入p。 然后,p在它的前体进程myreq请求(即P.watch )中旋转直到P.watch的状态变为g,取得锁定对象并运行程序,最后解除锁定。 进程p执行结束后,进行解锁操作,P.myreq的状态从p设置为g,P.myreq=P.watch上的图(b )为初始状态,3个进程P1、P2、P3已经将状态设为p

图7 c示出进程P1入队之后的状态,其中P1可以获取锁定

下一个过程如下。

图(a )表示进程P1、P2、P3已经入队

图3 (b )表示执行了过程P1,解除了锁定。 P2可以获取锁定

图7 (c )表示过程P1、P2、P3全部被执行,锁定被解除。 队列中没有等待的进程。

三、CLH队列中的一个Java为3.1 State类/* * * class name : state br/* function 3360 request状态. br/* Reason:request状态. br/* dass name publicenumstate {/* * * pending :与此状态下的请求对应的线程等待锁定. * * @since JDK 1.8 */PENDING,/** * GRANTED:

西餐前菜有哪些,aqs详解