第6章 多线程
在第5章中,我们查看了如何通过将程序分解为多个进程或多个线程而在C++(www.cppentry.com)程序中实现并发。我们讨论了进程,它是由操作系统创建的工作单元,解释了用于进程管理的POSIX API以及多个可用于创建进程的系统调用:fork( )、fork-exec( )、system( )和posix_spawn( )。还示范了如何构建C++(www.cppentry.com)接口组件、接口类和可用于简化一部分用于进程管理的POSIX API的声明式接口。本章将介绍:
什么是线程
用于线程管理的pthread API
线程调度及优先级
线程竞争范围
扩展thread_object以封装线程属性功能
6.1 什么是线程
线程是进程中可执行代码流的序列,它被操作系统调度,并在处理器或内核上运行。所有的进程都有一个主线程(primary thread)。主线程是进程的控制流或执行线路。具有多个线程的进程拥有和线程数目一样多的控制流。每个线程独立且并发地执行自身的指令序列。具有多个线程的进程是多线程的。线程分为用户级线程和内核级线程。与进程相比,内核级线程在创建、维护和管理方面给操作系统带来的负担都要轻很多,因为与线程关联的信息很少。内核线程被称作轻量级进程,因为它的开销要比进程少。
线程执行程序中无关的并发任务。线程可用于简化具有固有并发的应用程序的程序结构,其方式与通过函数或过程来封装功能性使得应用程序的结构更简单相同。线程可以封装并发功能。线程在一个进程的地址空间中使用最少的共享资源,相比之下,应用程序则使用多个进程。这使得操作系统得到总体更加简单的程序结构。如果正确使用,线程可以通过利用多核处理器并发来改进应用程序的吞吐率和性能。每个线程负责被分配的一个子任务,然后线程独立管理子任务的执行。可以为每个线程指定反映它执行的子任务的重要性的优先级。