Java是否提供了一个允许worker在同一个线程上执行的ExecutorServ
我正在寻找ExecutorService的实现,它将提供以下语义.每个线程都由“worker”占用,该“worker”根据输入执行某些任务.每个工作人员都保证只在一个线程中执行,因此,应该允许它在任务之间保持状态,而不需要同步开销,因为它将在一个线程中与自身同步.
所以,假设我有100个输入,10个工人,我希望能够写出如下内容: for (Input input: inputs) { // The following code would pass t to all 10 workers,// each bound to their own thread,// and wait for them to complete. executor.invokeAll(input); } 请注意,每个Worker对任何给定的输入都做了不同的事情.输入不是可运行的代码块,它只是工作者的参数.每个工作人员决定如何处理输入.但是,为了使其更简单,工作人员实现了一个接口,允许以多态方式调用它,接收输入. 我使用Map< Worker,WorkerExecutor>一起攻击了一些有效的东西,其中WorkerExecutor是我在Executors.newSingleThreadPool周围的瘦包装器,并且每个线程池中只运行一个Worker实例.我宁愿找一些知道他们在做什么的人写的东西:-) 潜在的不足我很好 我意识到这种语义会导致效率低下,但是,我试图在开发时间方面获得最大的收益,并且重新设计Worker的每个实现都是线程安全的并非易事.我的意思是低效率是执行可能/看起来像这样(在这个例子中模拟最多2个活动线程): | Task 1 | Task 2 | Task 3 | Task 4 | Worker 1 | =@ | =@ | =@ | =@ | Worker 2 | ==@ | ==@ | ==@ | ==@ | Worker 3 | ==@ | ==@ | ==@ | ==@ | Worker 4 | =====@ | =====@ | =====@ | =====@ | 问题是在工人3完成之后,没有剩下的任务要做,直到工人4完成才能完成工作.这可能是CPU可以闲置的任意长时间. 这样的ExecutorService是否存在? 解决方法
这听起来像你真正想要的是
actors.简而言之,一个actor是一个在一个线程中运行的对象,它有一个任务的“邮箱”,它负责按顺序处理.
Akka似乎是目前在JVM上提供演员的领先库/框架.看看那边.还有
another SO answer列出了Java中几个演员的替代方案.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |