1. 引言
最近工作开始使用C++,于是想用C++实现一个线程池。这里就分两篇文章来记录一下实现的过程,本篇主要为理论篇,具体的实践篇,等代码功能稳定以后再总结。
2. 简介
本部分从线程池作用到线程池的原理介绍。想要实现具体的线程池,需要先知道线程池有什么作用,然后再去学习他的原理,最终用代码实现出来。
线程池的作用
在具体的代码中,经常会遇到以下场景:
① 监听机制:在代码正常运行时,需要随时监听主线程的状态或者某个变量的状态,一旦状态变化立刻需要处理。
② 耗时任务: 在主进程执行某个耗时特别长的任务时,会导进程长时间阻塞卡顿现象。
③ 任务状态控制:即在任务执行过程中,能够终止此任务的执行。
等等。
以上情景都可以用线程来实现,当以上场景在一个代码中多次出现时,可能就要创建很多个线程来满足相应的需求了。但线程过多或者频繁创建和销毁线程会带来调度开销,进而影响缓存局部性和整体性能。在线程池中只存在几个固定的线程,由线程池来维护,等待调度器派发已存在空闲的线程去执行对应的任务。由此,便实现了线程的一次创建多次使用的功能,从而避免了短时间内的任务时创建与销毁线程的代价。线程池不仅能保护资源的充分利用,还能保证不被过分调度。
线程池的原理
线程池的在初始化时,会先创建固定数量的线程;具体的任务会放在任务队列中,类似于生产者-消费者概念。多个线程作为消费者,任务队列作为生产者。当任务队列存在多个任务时,便会由调度器依次将任务派发给现有的线程执行。某个任务执行完毕后,当前线程就会被释放,此时调度器可继续派发任务给线程执行。如此反复便实现了,多个任务并发的执行。
3 总结
本篇文章简单记录一下线程池的作用及原理,后续文章会记录具体的代码实现。