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]
| 归档时间: |
|
| 查看次数: |
6618 次 |
| 最近记录: |