Pthreads Primer
本书组织
C1: Introduction
C2: Concepts
C3: Foundation
C4: Lifecycle
C5: Scheduling
C6: Synchronization
C7: Complexities
C8: TSD
C9: Cancellation
C10: Signals
C11: Details
C12: Libraries
C13: Design
C14: Language
C15: Tools
C16: Performance
C17: Hardware
C18: example
本书只讨论pthread模型,它可用任何语言实现。
一个线程就是一个控制流,多现程之间共享一片内存,是在一个地址空间里遵循并发执行的一种方法。
SMP(share memory symmetric
multiprocessors):共享内存对称多处理
MT可以充分利用SMP的硬件优势,特别是对于CPU密集型的应用。
MT的价值
充分利用多处理器优势
代替进程间通信
增加响应率
增加吞吐量
简化实时处理
简化信号处理
充分利用系统资源
。。。
共享内存可以做任何事,只是不好用和比较慢。
典型的多任务操作系统(Windows NT, UNIX等)中,
存在固有的划分:用户空间,内核空间.这一点已经被硬件强化了.对cpu来说,就有2个状态:用户态,核心态.
用户态下,允许运行通常的用户程序;
内核态下,跑的是IO指令,中断指令,虚拟内存管理指令,当然还有状态变更指令.
OS完全掌控IO,存储,处理器等,所以OS需要为每个任务维护数据.所以多任务也延伸到了内核空间.
OS采用trap机制来捕获对核心态操作的指示.
每个程序的状态可能互无关联.每个程序都独立地有1个栈,1个程序计数器,1个寄存器组.
这些程序1个时间点只能做1件事,这就是单个线程.
什么是线程呢?
线程是个抽象概念.它构成了计算机传统程序做的每一件事情.它
是cpu调度的1个程序状态.如果说1个进程由数据,代码,内核状态,cpu寄存器组构成,那么
线程就是由这些寄存器(程序计数器,通用寄存器,栈指针)的内容和堆栈构成.1个线程就是1个实时的计算状态.
线程有点类似进程,但进程是重量级的.
进程结构所有部分都在核心空间,用户程序根无无法直接接触到.线程是轻量级的,
线程的结构在用户空间,可以被直接访问.进程的所有线程共享相同的进程状态.他们驻留在相同的存储空间,看相同的数据,看相同的函数.当1个线程改变进程的变量,其他线程再次访问时也能看到改变.如果1个文件被1个线程打开,其他线程也能读这个文件.
内核交互Kernel Interaction
转向用户级的内核概念,系统调用怎么工作的,信号怎么被处理的,线程又是怎么被cpu调度的?
并发(Concurrency) vs
并行(Parallelism)
并发:多个线程(或传统进程)在同一时间执行,具体到1个时间点只能是其中1个在占用cpu.我们讲的多任务程序大多数情况指并发.
并行:在具体时间点有多个线程(或传统的进程)在跑.看起来1个CPU做不到并发?
系统调用基本上就是采用
trap机制实现的库函数.
同步同步是多个线程协调彼此的一种方法,避免其中一个意外地改变另外1个线程用到的数据.这通过提供一些库函数做到,这些函数限制并发地访问某个数据的线程的个数.最简单的就是
互斥锁.
调度调度是把线程分配给cpu的方式.
线程标准1.POSIX Threads所有的主流UNIX都声称符合POSIX标准.
2.Win32
3.OS/2这些OS的多线程标准不同于POSIX.不过有for Win32的POSIX自由库
阅读(822) | 评论(0) | 转发(0) |