线程管理的基础
每个程序至少有一个线程:执行main()函数的线程是程序的入口点。
其他线程有其各自的入口函数。这些线程与主线程 main() 同时运行。
当线程执行完其入口函数后,线程就会退出。这与main()函数执行完毕后程序结束的情形类似。
为了启动一个线程,你需要创建一个std::thread对象,然后等待这个线程结束。
启动线程
线程在std::thread对象构造时就开始启动了,无返回值时,启动后自动结束,存在返回值时,参数传递完成后结束。
每个程序至少有一个线程:执行main()函数的线程是程序的入口点。
其他线程有其各自的入口函数。这些线程与主线程 main() 同时运行。
当线程执行完其入口函数后,线程就会退出。这与main()函数执行完毕后程序结束的情形类似。
为了启动一个线程,你需要创建一个std::thread对象,然后等待这个线程结束。
线程在std::thread对象构造时就开始启动了,无返回值时,启动后自动结束,存在返回值时,参数传递完成后结束。
在并发编程中,显式管理线程可能并不理想,因为需要处理线程对象的生命周期和确定线程数量等问题。
理想的情况是,能够将代码划分为可并发执行的最小片段,并让编译器和库自动管理线程和任务的并行化,以达到最优性能。
此外,当需要在满足某些条件时提前结束线程时,需要有一种机制来向线程发送停止请求,以便它们能够整理并尽快完成。
线程池(Thread Pool)是一种软件设计模式,用于实现计算机编程中的并发执行。它也经常被称为复制工人或工人队模型(replicated workers or worker-crew mode)。
线程池维护多个线程,等待被监督程序分配任务以进行并发执行。
它的主要目标是通过重复利用已创建的线程来降低线程创建和销毁造成的消耗。
这种模式类似于公司的汽车池,员工可以根据需要使用汽车,而不是每个员工都拥有一辆汽车。