之前章节通过为每个线程创建std::thread对象来 管理线程 一些场合,这不是你所需的 你须管理线程对象的生命周期决定适合问题和硬件的线程数量等 理想的方案 你只需将代码划分可以被并发执行的若干小片将他们传递给编译器和运行库告诉编译器“井行化这些代码来得到较优性能
另一场景 你可能用几个线程来求解一间题,但要求它们在满足一定条件的时候提前结束 结果已经被求解出来,或因有错甚至是因为用户显式要求操作被放弃不管什么原因,线程需被发送“请停止”信号 它们可以放弃赋予它们的任务清理自己的环境,然后停止
本章从自动管理线程数量和线程之间的任务划分 开始介绍管理线程和任务的机制
线程池类似 不过其中共享的是线程而不是汽车。 大多数系统上面, 为每个可以与其他任务并行执行的任务分配一个单独的线程是不切实际 但可尽量充分利用硬件提供的并发性线程池允许你利用这一点可被并发执行的任务被提交到线程池,在线程池中被放入一个等待队列每个任务会被某个工作线程从等待中取出来执行工作线程的任务就是当空闲的时候从等待队中取出任务来执行
建立一个线程池有几个关键设计问题 比如在线程池中创建几个工作线程将任务高效分配给工作线程的方法以及是否可以等待某个任务的完成等。 这节 提出一些实现来解决这些问题我们从最简单的线程池开始