Java多线程管道(7)

Java多线程管道(7),java,multithreading,concurrency,pipeline,Java,Multithreading,Concurrency,Pipeline,我正在构建一个摘要器,我需要一个管道实现。 我使用了自己的实现,但随着工作的发展,我发现它不会被削减 java中有一个成熟的框架,它为我提供了基础(基本上是同步逻辑)?< /P> 我需要声明一个阶段,每个阶段都有工作人员,工作人员处理项目并将结果返回到该阶段,该阶段将其发送到下一个阶段(可能散开) 我的实现的全部要点是给我这个基础,但是它不能正常工作(导致死锁的竞争条件) 我尝试过获取apache库(基本上已经死了),但它没有创建后台工作程序的功能 只要将所有阶段与阻塞队列连接起来,一切都将可

我正在构建一个摘要器,我需要一个管道实现。 我使用了自己的实现,但随着工作的发展,我发现它不会被削减

java中有一个成熟的框架,它为我提供了基础(基本上是同步逻辑)?< /P> 我需要声明一个阶段,每个阶段都有工作人员,工作人员处理项目并将结果返回到该阶段,该阶段将其发送到下一个阶段(可能散开)

我的实现的全部要点是给我这个基础,但是它不能正常工作(导致死锁的竞争条件)


我尝试过获取apache库(基本上已经死了),但它没有创建后台工作程序的功能

只要将所有阶段与阻塞队列连接起来,一切都将可靠地工作。如果生产者的工作速度比消费者快,请使用“有界”以避免队列饱和


大多数pipeline/dataflow/actor框架处理的任务非常小,以至于将单个线程分配给一个stage都是一种开销,因此stage共享一个线程池,因此工作线程的数量有限。每个阶段(可能)利用几个线程的唯一框架是,但我不确定。

ApacheCamel:按照您所描述的做,但可能对您现有的设计过于干扰

你为什么不把每个工人都按顺序叫来?你知道使用多个线程比只使用一个线程要快吗?我有n个阶段,每个阶段有m_n个工作线程,每个工作线程在一个单独的线程上运行,以最大限度地提高效率。某些级扇出(输出到多个级)。我的实现工作到昨天,但是,停止工作,我似乎找不到错误。我对它感到失望(它有太多的bug,不是我项目的直接部分),希望能找到一个有建议的人。这是我的库,缺少泛型,并且不可信赖。这是我的观点,你有没有衡量过它是效率最大化还是开销最大化?如果你没有做过这项研究,你可能会增加比多个线程带来的开销多得多的开销,最终你会得到更复杂、更不可靠的代码。我已经测试并找到了正确的线程平衡,效果非常好。当我使用多线程管道时,运行时减少了一半,但是我的实现不可靠,我不能浪费时间去处理它,因为我有一个摘要器和一个GA来实现。这就是为什么我在堆栈溢出上跳过了某人,他/她使用的成熟框架可能会给我一根骨头。如果你看一下我的库,你会发现我就是这么做的。每个阶段都与下一个阶段相耦合,数据通过观察者模式流动(也许我应该通过下一阶段的阻塞队列?),我在整个程序中使用8个线程的单线程池,我不会浪费时间创建/销毁线程。我下载了你的库,但没有找到测试或示例,所以很难恢复它应该如何使用,所以实现是否正确地遵循了这个想法。是的,我没有创建任何示例,因为我是唯一的用户或这个库。。。很抱歉…Queus比observer/observable模式更自然、更可靠。但是在线程池上运行的任务中直接使用队列是有问题的,因为阻塞
take
操作会阻塞底层线程,这可能会导致线程饥饿(一种死锁)。解决方案是在没有数据时退出
Runnable.run()
,并在数据出现时重新提交任务。评估我的实现此解决方案的库。我肯定会查看您的库。请再看看我的,我已经添加了两个例子(一个阶段和两个阶段),它们非常简单,并不能真正代表我的设想,但它们通过了总体思路。