Java中的多线程管道

Cel*_*ine 4 java multithreading pipeline

关于在Java中运行多个执行管道的线程,我遇到了问题.

说管道的'输入'是:

5条指令即:I1,I2,I3,I4,I5

如果已经取出I1,它现在可以进行解码,但fetch操作不会等待decode任务完成.在将获取的指令传送到之后decode,fetch操作现在将获得下一条指令I2,依此类推.

这是一个有五个阶段的流水线调度.

如何使用java多线程模拟这样的机器?

Arj*_*kar 11

假设您想知道如何实现这样的事情:它被称为"管道模式".如果这不是作业,您可以重用此模式的现有实现.一个可在:

http://code.google.com/p/pipelinepattern/

如果这是家庭作业,那么你的老师可能会期望你从头开始自己写作.一个很好的起点是这两个阶段的管道(其中一个线程从文件读取行,另一个线程打印行):

http://rosettacode.org/wiki/Synchronous_concurrency#Java

在上面的例子中,两个阶段通过a进行通信BlockingQueue(即阶段1写入队列,阶段2读取它).如果阶段1始终比阶段2快,则队列将变得非常大).您可以通过使用SynchronousQueue替代来强制执行锁步的操作[请参阅此答案的注释#1,为什么].

如果你需要一个五阶段管道,你需要通过拥有5个线程来扩展它,它们之间有4个队列:

in -> [s1] -> q12 -> [s2] -> q23 -> [s3] -> q34 -> [s4] -> q45 -> [s5] -> out
Run Code Online (Sandbox Code Playgroud)

上面,每个[s*]代表一个阶段(一个线程),每个qAB代表一个队列被排队[sA]并从中排队[sB]