多线程编程的优点
- 响应度高:如果部分进程被阻止,可能允许继续执行,这对用户界面尤其重要
- 资源共享:线程共享进程资源,比共享内存或消息传递更容易
- 经济:线程切换比进程创建更便宜,开销比上下文切换更低
- 多处理器体系结构的利用:进程可以利用多核架构,每个核有一个或两个线程
多线程模型
多对一模型:
多个用户级线程对应一个内核级线程,目前很少有系统使用这种模式。
- 优点:线程管理在用户空间,不需要切换到内核态,消耗的资源相对较少,效率较高
- 缺点:当一个线程进行阻塞的时候,对应内核态线程的阻塞,这个时候整个进程都会被阻塞掉;多个线程无法并行的运行在多处理机上
一对一模型:
每一个用户级线程对应一个内核级线程
- 优点:当一个线程进行阻塞之后,其他的线程可以继续运行,不会造成进程的阻塞,并发能力强,可以在多处理器上并行
- 缺点:创建线程的开销比较大,因为对于每一个线程都要创建一个内核级线程一一对应
多对多模型:
允许将多个用户级线程映射到多个内核线程。
允许操作系统创建足够数量的内核线程。
线程库
线程库为程序员提供创建和管理线程的API
有两种方法:
一,在用户空间中提供一个没有内核支持的库
二,执行一个由操作系统直接支持的内核级的库
Pthreads:
可以作为用户级或内核级提供,用于线程创建和同步的POSIX标准