并发和任务调度的高级知识点

来源:互联网 发布:卵巢癌的早期b超数据 编辑:程序博客网 时间:2024/05/18 00:09

1、CAS : Compare And Swap/Set

2、Memory Barrier: 内存栅栏,这是一个CPU级的指令,比锁的开销要小

3、Cache Line:

    cpu中普遍的cache line为64 bytes,所有补齐朝采用64byte。

    jvm中 所有对象有2个word的header,每个word 为4 byte,所以共8byte。

    为了在packing的时候更高效,对象的field被从定义顺序(基于字节大小)按下列顺序重排:

    1.doubles(8) and longs(8)

    2.ints(4) and floats(4)

    3.shorts(2) and chars(2)

    4.booleans(1) and bytes(1)

    5.references(4/8)

    6.<repeat for sub-class fields> 

    所以我们补齐cache line:在任意field之间补上7个long(8)

4、CPU False Sharing(伪共享):

5、CPU Affinity(亲缘性):

    按照默认设置,当系统将线程分配给处理器时,如果所有其他因素相同的话,它将设法在它上次运行的那个处理器上运行线程。让线程留在单个处理器上,有助于重复使用仍然在处理器的内存高速缓存中的数据。

    计算机在引导时,系统要确定机器中有多少个CPU可供使用。按照默认设置,任何线程都可以调度到这些CPU中的任何一个上去运行。为了限制在可用C P U的子集上运行的单个进程中的线程数量,可以调用SetProcessAffinityMask。子进程可以继承进程的亲缘性。此外,可以使用作业内核对 象将一组进程限制在要求的一组CPU上运行。

在大多数环境中,改变线程的亲缘性就会影响调度程序有效地在各个CPU之间移植线程的能力,而这种能力可以最有效地使用CPU时间。

5、SMP:Symmetrical Multi-Processing,对称多处理技术,是指在一个计算机上灰机了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构。

   要实现SMP,对CPU也有要求

5.1 CPU内部必须内置APIC,Advanced Programmable Inteerrupt Controllers 可编程中断控制器,CPU通过彼此发送中断来完成他们之间的通信。

5.2 相同的产品型号,这样可以保证指令完全一样

5.3 完全相同的运行频率

5.4 尽可能保持相同的产品序列编号

 

6、Mechanical Sympathy:Hardware and software working together in harmony,讲的是底层硬件是如何运作的,以及与其协作而非相悖的编程方式。(注解:sympathy这里是共鸣、一致的含义),也就是说软件的编程方式要考虑到硬件的系统结构,如果不遵循相关硬件架构,可能导致的代价非常大。就算有了合适的算法,也可能导致低效的性能。(Martin Thompson很喜欢用Mechanical Sympathy这个短语,这个短语源于赛车驾驶,它反映了驾驶员对于汽车有一种天生的感觉,所以他们对于如何最佳的驾御它非常有感觉。)

 

7、Thread.yield()  |java.util.concurrent.locks.LockSupport.park() / unPark(Thread);



0 0
原创粉丝点击