如何异步向tango(D)ThreadPool添加任务?

时间:2011-12-04 01:07:50

标签: concurrency threadpool d tango

我正在将任务队列/线程池模式系统与D中的 n - 线程系统进行比较。我是D编程语言的新手,但是使用了C,Java中的线程,和之前的Python。我正在使用Tango库,我正在构建一个Web服务器作为示例。

我决定使用tango.core.ThreadPool作为我的线程池,因为我的项目侧重于传统线程和任务队列之间的易用性和性能。

documentation表明我有3个选项:

  1. ThreadPool.wait() - 当池从队列中消耗任务时阻止当前线程。
  2. ThreadPool.shutdown() - 完成池中的任务但队列中的任务。
  3. ThreadPool.finish() - 完成池和队列中的所有任务,但不再接受。
  4. 这些都不是我想要的。我的理解是,您的任务列表应该能够在这些系统中增长。 Web服务器非常简单和天真;我只是希望它尽可能地扩展到许多并发请求,即使它的资源管理只包含尽可能快地消耗任务队列中的东西。

    我怀疑这是因为主线程需要加入其他线程,但我的线程知识有点生疏。

2 个答案:

答案 0 :(得分:0)

void append(JobD job, Args args)怎么样?从文档中它的工作方式就像Executor.execute(Runnable)形式java(提交将来某个时间运行的任务)

请注意,这是一个LIFO队列而不是预期的FIFO队列,因此分配足够的工作人员

答案 1 :(得分:0)

我发现我构建代理的方式导致了部分代码的阻塞。我现在将该对象作为参数传递给我的委托,而不是关闭SocketServer.accept返回的对象。我不知道为什么这是解决方案,但程序现在按预期工作。我听说D版1中的封口坏了;也许这与它有关。