摘要:
无论是什么系统,线程池和task都是给上层所提供的基础的功能单元。本文记录一些核心的设计思想。
线程池要面对的场景:
- 调用下层接口时,被IO阻塞,导致整个服务无法对外提供服务
- 更上层调用本模块接口时,是需要做到同步,导致阻塞了调用的线程。但是上层的模块,使用了新的线程,继续调用本同步的接口,需要能并发的访问,也就是不受上个阻塞线程的影响。
线程池与task:
- 创建多个线程,这些线程开始一同执行
- 要被线程执行的操作,被封装到task的数据结构里
- task的列表,是全局可见的,是处于临界区,所以需要枷锁。每次从task列表中拿出一个task,交给一个线程去处理。
- 线程处理完task,通过回调函数,对外告知结果,来和调用模块进行交互。
- 其实可以理解成生产者消费者模型。线程模型当作工作组。