什么是并发编程模型?
并发编程模型是一种如何使用并发来有效、高效处理任务的编程方式。也就是说如何使用并发。
并行工作者模型
流水线模型
并行工作者模型
并行工作者就是多个任务是并行执行的。用于个线程用于管理,当有任务来到时,通过某种策略来将任务分发给某一个worker线程。而真正的worker线程执行是并行的。
并行工作者是一个线程完完全全的处理一个任务,也就是一个任务完全由一个线程来处理。但是多个线程之间的任务是不能保证他们的执行顺序的。然而有时候我们是需要多个任务是按照顺序来执行的。
另外,并行工作者模型是有多少任务并发执行就有多少线程,当随着任务数量的增加,线程数量也会不断增多。然而,当线程数量达到一个阈值时,性能反而会下降。
流水线模式
与并发工作模型不同的是,流水线模型将是通过一个任务的工作过程来设计的。也就是说一个任务不再是由一个线程来处理了,而是由多个线程来处理,每个线程都有先后顺序,不同的线程执行任务的不同阶段。如Worker2执行IO、Worker3执行计算、Worker4打印日志。
这样任务数量就和线程数量没有那么直接的关系了,而是跟任务的过程有关。当有很多的任务需要处理时,线程不会随着任务的数量增加而增加。当某个线程执行完一个任务的某一个阶段后,将任务交给下一个线程处理,而自己又可以接受上一个线程扔过来的任务继续处理。
为了更高效的处理任务,可以将流水线模型和并发工作者模型进行结合:
将并行工作者模型和流水线模型集合,当有很多的任务需要处理时,为每一个 ”线程链“ 分配一批任务,这样每个 ”线程链“ 的负载就不会过重。