2

我正在将任务队列/线程池模式系统与 D 中的n线程系统进行比较。我对 D 编程语言非常陌生,但之前曾使用过 C、Java 和 Python 中的线程。我正在使用 Tango 库,并以构建网络服务器为例。

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

文档显示我有 3 个选项:

  1. ThreadPool.wait()- 当池消耗队列中的任务时阻塞当前线程。
  2. ThreadPool.shutdown()- 完成池中的任务,但完成队列中的任务。
  3. ThreadPool.finish()- 完成池和队列中的所有任务,但不再接受。

这些都不是我想要的。据我了解,您的任务列表应该能够在这些系统中增长。Web 服务器非常简单和幼稚;我只是希望它尽最大努力扩展到许多并发请求,即使它的资源管理只包括尽快消耗任务队列中的东西。

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

4

2 回答 2

0

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

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

于 2011-12-04T02:22:32.687 回答
0

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

于 2011-12-04T21:57:40.753 回答