文章目录

ThreadPoolPrincipal

为了充分利用多核的优势,我们利用多线程来进行任务处理,但是线程也同样不能够滥用,它会带来下面的问题:

  • 线程本身存在开销,系统必须为每个线程分配如栈、TLS(线程局部存储)、寄存器等;
  • 线程管理会给系统带来开销,上下文切换同样会给系统带来成本;
  • 线程本身是可重用的资源,不需要每次都进行初始化操作。

所以往往在使用中,我们无需把线程和Task任务进行一对一的映射,只需要预先初始化有限的线程个数来处理无限的任务即可。相应地,线程池技术应运而生,原理也就是如此。

从图中可看出,线程池中主要含有三个队列:

  1. 工作队列
  2. 工作线程队列
  3. 忙碌线程队列

工作队列是一个阻塞队列,任务(仿函数)不断地被添加进来(自动地阻塞获取的工作线程),工作线程队列(一直不变)则从该队列中获取任务执行(当任务队列为空时阻塞等待通知),如果获取到任务,则将线程送入到忙碌线程队列中,执行任务的仿函数,当任务完成时,重新移出工作线程队列。

上述线程池技术有效地实现了线程、任务的解耦,并且能够有效地管理多个线程,在进行并行仿真引擎设计时,将起到良好的效果。下一步将进行这样的尝试,在线程池技术的基础上,设计出一个良好的并行仿真引擎。

文章目录