第 4 章 多线程

4.1 线程

  每个线程是cpu使用的一个基本单元,它包括线程ID、程序计数器、寄存器组和堆栈。它与同一进程的其他线程共享代码段、数据段和其他操作系统资源。

          

   多线程编程的优点:响应性、资源共享、经济、可伸缩性。

4.2 多核编程

  对于单核系统,并发仅意味着线程随着时间交替执行,因为处理核只能同一时间执行单个线程。

  对于多核系统,并发表示线程能够并行运行,因为系统可以给每个核分配一个单独的线程。

  并行性和并发性的区别:

    并行系统可以同时执行多个任务,并发系统支持多个任务,允许所有任务都取得进展。没有并行,并发也是可能的。

4.3 多线程模型

  通过用户线程和内核线程来提供线程支持。用户线程位于内核线程之上,它的管理无需内核支持,而内核线程由操作系统来直接支持与管理。

多对一模型

  映射多个用户线程到一个内核线程。

  线程管理由用户控件的线程库来完成,因此效率高。但一个线程执行阻塞系统调用,那么整个进程将会阻塞。任一时间只有一个线程可以访问内核,所以多个线程不能并行运行在多处理核系统上。

一对一模型

  映射每个用户线程到一个内核线程。

  一个线程执行阻塞系统时,允许另一个线程继续执行,同时也允许多线程并行运行在多核系统上。唯一的缺点是创建一个用户线程就要创建一个内核线程,由于创建内核线程的开销会影响应用程序的性能,所以这种模型的大多数限制了系统支持的线程数量。

多对多模型

  多路复用多个用户线程到同样数量或更少的内核线程。

  可以创建任意多的用户线程,并且在多核系统上并行执行。当一个线程执行阻塞系统调用时,内核可以调度另一个线程来执行。

4.4 线程库

  线程库为程序员提供创建和管理线程的API。

4.5 隐式多线程

  将多线程的创建和管理交给编译器和运行时库来完成,这种策略叫隐式线程。

4.5.1 线程池

  思想:在进程开始时创建一定数量的线程,并且加到池中等待工作,当收到请求时,会唤醒池中的一个可用线程,一旦线程完成了任务,它会返回池中等待工作。如果迟中没有可用线程,那么会等待直到有空线程为止。  

猜你喜欢

转载自www.cnblogs.com/astonc/p/12150815.html