学习来源:《程序员的自我修养》

1. 页映射模式下,CPU发出的是Virtual Address,。经过MMU(Memory Management Unit)进行也映射,转换成了Physical Address

2.多线程中的私有与共享:

3.线程状态切换:

实际中,Running到Ready状态还有yeild()方法可以触发,另外有一种状态是阻塞状态(包括等待状态【由wait()触发】,被notify()后进入锁定阻塞态,锁被释放后进入就绪了,普通的阻塞是由sleep()引起)

(1)关于优先级:频繁进入等待状态的线程由于不“霸占”CPU,具有更高的优先级提升,因此I/O密集型比CPU密集型线程更容易得到优先级提升

(2)任何一条语句在指令层级都被拆分为多条指令,因此在多线程时候容易产生不一致的问题,此时引入单指令操作即原子操作

4. fork函数产生一个和当前进程完全一样的新进程,和原任务共享一个内存空间,写时复制(Copy On Write),如果希望在使用时用新的可执行影响替换当前的,调用exec()可以

5.可重入(Reentrant)与线程安全

  (1) 重入情况:多个线程同时执行函数;函数自身调用自身

  (2)可重入表明重入后不会产生任何不良影响,即结果可再现

  (3)可重入的特点:不使用/依赖静态或全局的非const变量;仅依赖调用方提供的参数‘不依赖单个资源的锁;不调用任何不可重入的函数

6. 过度优化

  CPU在执行程序的时候,为了提高效率可能会出现交换指令的顺序,即在进行优化的时候,交换毫不相干的相邻指令的执行顺序

    在单线程中是没有问题的,但是在多线程中这样的顺序就使程序可能出现不同的结果

  volatile关键字:1)阻止编译器为提高速度将变量缓存到寄存器内而不写回;2)阻止编译器调整操作volatile关键字修饰的变量的指令顺序

posted on 2015-09-14 15:06  KarayLee  阅读(149)  评论(0编辑  收藏  举报