深入理解计算机系统——第12章:基于线程的并发编程
多进程:每个流单独的进程。私有的地址空间,共享数据困难。
IO多路复用:所有流在一个进程上,共享地址空间,利用IO多路复用技术来调用逻辑流。
线程:
(1)线程就是运行在进程的上下文中的逻辑流,线程由内核自动调度。
(2)线程都有自己的线程上下文,包括线程ID,线程栈,栈指针,程序计数器,通用目的寄存器,条件码。
(3)所有运行在一个进程的线程都共有虚拟地址空间。
线程是进程和IO多路复用的结合:
(1)同进程一样,线程由内核自动调度,内核识别线程ID。
(2)同IO一样,线程运行在同一进程的上下文中,共享进程虚拟地址空间的整个内容,包括堆,代码,数据,共享库,打开文件。
12.3.1 线程执行模型:
(1)从某一时刻主线程创建一个对等线程,那么从这个时候开始,两个线程并发的执行。
线程与进程的不同:
(2)线程的相互之间的切换要快得多。
(3)线程不是和进程一样按照父子进程来组织的,线程创建的是对等线程。
线程池:
(4)同一个进程相关的线程组成一个对等的线程池。
(5)一个线程可以杀死它的任何的对等线程,也可以等待它的终止。每个对等线程之间可以共享数据。
12.3.2 Posix线程
12.3.3 创建线程
(1)pthread_create函数
(2)pthread_self函数
12.3.4 终止线程
(1)当顶层的线程例程返回时,会隐式的终止
(2)pthread_exit函数,显式的终止
(3)某个对等线程调用unix的exit函数,则终止进程以及与进程相关的所有线程。
(4)pthread_cancel函数
12.3.5 回收已终止线程资源
12.3.6 分离线程
12.3.7 初始化线程