《程序员的自我修养》读书笔记

来源:互联网 发布:js生成随机数 编辑:程序博客网 时间:2024/05/12 04:34
  1. Liunx对多线程的支持颇为贫乏,事实上,在Linux内核中并不存在真正意义上的线程概念。Linux将所有的执行实体(无论是线程还是进程)都称为任务,每一个任务概念上都类似于一个单线程的进程,具有内存空间、执行实体、文件资源等。不过,Linux下不同的任务之间可以选择共享内存空间,因而在实际意义上,共享了同一个内存空间的多个任务构成了一个进程,这些任务也就成了这个进程里的线程。
  2. 当线程数量小于处理器数量时,线程的并发是真正的并发,不同的线程运行在不同的处理器上,批次之间互不相干。
  3. 通常情况下,频繁地进入等待状态(进入等待状态,会放弃之后仍然可占用的时间份额)的线程(例如处理I/O的线程)比频繁进行大量计算、以至于每次都要把时间片全部用尽的线程要受欢迎很多。其实道理很简单,频繁等待的线程通常只占用很少的时间,CPU也很喜欢捏软柿子。I/O密集型线程总是比CPU密集型线程容易得到优先级的提升。
  4. volatile可以阻止编译器为了提高速度将一个变量缓存到寄存器内而不回会。
  5. 即使合理地使用了锁,也不一定能保证线程安全。
  6. 一条barrier指令会阻止CPU将该指令之前的指令交换到barrier之后,反之亦然,也就是barrier指令的作用类似于一个拦水坝,阻止换序“穿透”这个大坝。
  7. 三种线程模型:(1)一对一模型:一个用户使用的线程就唯一对应一个内核使用的线程,但这种模型中用户的线程数量因内核线程数量而受到限制,另外许多操作系统内核线程调度时,上下文切换的开销较大,导致用户线程的执行效率下降;(2)多对一模型:如果其中一个用户线程阻塞,那么所有的线程都将无法执行,因为此时内核里的线程也随之阻塞了,另外,在多处理器系统上,处理器的增多对多对一模型的线程性能也不会有明显的帮助。但同时,多对一模型得到的好处是高效的上下文切换和几乎无限制的线程数量。(3)多对多模型:一个用户线程阻塞不会使得所有的用户线程阻塞,因为此时还有别的线程可以被调度来执行。另外,多对多模型对用户线程的数量也没什么限制,在多处理器系统上,多对多模型的线程也能得到一定的性能提升,不过提升的幅度不如一对一模型高。
原创粉丝点击