考虑这样一种场景,有一批数据需要处理,且每个数据是有顺序的,这时最简单的方式就是按顺序同步执行每个数据的处理。但是,在有多核cpu时这种方式无疑是对cpu资源的极大浪费,这时就需要多开几个线程同时对数据进行处理,并且需要按顺序取到处理结果。这也就是多线程并发执行且顺序进出执行器的适用场景。
先看设计图:
从图中可以看到该执行器分三个部分:数据输入器、并发执行器、结果输出器。
其中数据输入器负责对数据进行编号,并发执行器负责对数据进行处理、结果输出器则保证输出的结果是按输入顺序输出的。
通过上图我们可以看到,其实这个执行器还是比较简单的,重点就是结果槽是顺序的,执行线程执行完将结果放到对应顺序的结果槽中,而取结果的线程按结果槽的顺序依次从结果槽中取数据,这样就保证了结果是顺序的。需要注意的是结果槽的数量和执行线程的数量是一致的或者大于执行线程数量的,取数据的过程是循环顺序从结果槽中取数据的。另外数据输入器在结束输入时需要给最后一个数据加一个结束的标志,这样结果输出器在取到的结果中发现这个标志才知道已经执行完成了,从而结束工作。
具体的实现代码后面补上吧,这里只是单纯分享一下设计思路。