我正在将任务队列/线程池模式系统与D中的 n - 线程系统进行比较。我是D编程语言的新手,但是使用了C,Java中的线程,和之前的Python。我正在使用Tango库,我正在构建一个Web服务器作为示例。
我决定使用tango.core.ThreadPool
作为我的线程池,因为我的项目侧重于传统线程和任务队列之间的易用性和性能。
documentation表明我有3个选项:
ThreadPool.wait()
- 当池从队列中消耗任务时阻止当前线程。ThreadPool.shutdown()
- 完成池中的任务但不队列中的任务。ThreadPool.finish()
- 完成池和队列中的所有任务,但不再接受。这些都不是我想要的。我的理解是,您的任务列表应该能够在这些系统中增长。 Web服务器非常简单和天真;我只是希望它尽可能地扩展到许多并发请求,即使它的资源管理只包含尽可能快地消耗任务队列中的东西。
我怀疑这是因为主线程需要加入其他线程,但我的线程知识有点生疏。
答案 0 :(得分:0)
void append(JobD job, Args args)
怎么样?从文档中它的工作方式就像Executor.execute(Runnable)
形式java(提交将来某个时间运行的任务)
请注意,这是一个LIFO队列而不是预期的FIFO队列,因此分配足够的工作人员
答案 1 :(得分:0)
我发现我构建代理的方式导致了部分代码的阻塞。我现在将该对象作为参数传递给我的委托,而不是关闭SocketServer.accept
返回的对象。我不知道为什么这是解决方案,但程序现在按预期工作。我听说D版1中的封口坏了;也许这与它有关。