oxb*_*kes 6 java concurrency scala actor
我有一个相当标准的Java机制来解决这个问题:
我使用的解决方案如下:
ExecutorService(可能是多线程的)ExecutorService.返回的Future内容缓存在地图中.完成服务用于在工作完成时从缓存中删除未来当然,我的执行者需要至少与我期望的阻塞工作项的数量一样大,但这在实践中不是问题.
所以现在我在Scala中编码并使用actor框架.假设我的工作项可以封装在发送给actor的事件中:
我将使用什么机制来安排特定时间的工作项?
我会使用java.util.concurrent.ScheduledExecutorService.
如果工作项是发送给actor的事件,我如何确保支持线程池大于可以同时阻塞的项的数量
这让我觉得这是一种破坏并行化努力的设计.尽量减少或消除阻塞和全局状态.这些是可组合性和可伸缩性的障碍.例如,考虑使用一个等待文件到达的专用线程,然后将事件发送给actor.或者查看java.nio以获取异步非阻塞I/O.
我在这里并不完全理解你的要求,但似乎你可以让一个线程/角色寻找I/O事件.然后作为计划的"工作项",安排创建非阻塞演员的效果.让这些参与者向I/O线程/ actor注册自己,以接收有关他们关心的I/O事件的消息.
如何取消之前安排的工作项?
ScheduledExecutorService返回期货.在这方面,你所拥有的并不是一个糟糕的设计.在Map中收集它们并调用future.cancel().