一个简单的分阶段多任务处理实例
1、概述我们经常需要处理一个很耗时的任务,一般只有其中几步是十分耗时的,此时我们想到的是多线程来处理此任务。但是往往我们不能简单地把整个任务弄成多线程程序。如:文件的读取,文件的写入需要单线程处理(如果多线程处理需要加锁,此时性能没有单线程快)。为了解决此类问题,此我们可以用到,生产者与消费者的模式。本质上是Staged Event Driven Architecture的原型。2、具体分析我们把中间数据存入中间的queue。大致流程如下:
其中一部分如果比较耗时的话,我们可以用多个线程处理。3、例子,java代码实现我们把文件mid.txt中的一个个mid,查询数据库换成aliid,再写到另一个文件中,格式为:mid\taliid。其中查询数据库比较耗时,我们可以多弄一个线程来处理这个耗时的任务。(由于是io密集型的任务,我们可以采取大于CPU个数的线程处理)代码:https://github.com/lwwcl1314/apollo/blob/master/bigdata/src/main/java/com/apollo/dbfetcher/DbFetcher.javajava实现注意几点: