Как добавлять задачи в Tango (D) ThreadPool асинхронно? - PullRequest
2 голосов
/ 04 декабря 2011

Я сравниваю систему шаблонов очереди / пула потоков с n системой потоков в D. Я действительно новичок в языке программирования D, но работал с потоками в C, Java иПитон раньше.Я использую библиотеку Tango и создаю веб-сервер в качестве примера.

Я решил использовать tango.core.ThreadPool в качестве пула потоков, так как мой проект ориентирован на простоту использования и производительность между традиционнымиПотоки и очереди задач.

Документация показывает, что у меня есть 3 варианта:

  1. ThreadPool.wait() - Блокирует текущий поток, пока пул потребляет задачи изочередь.
  2. ThreadPool.shutdown() - завершает задачи в пуле, но не те в очереди.
  3. ThreadPool.finish() - завершает все задачи в пуле и очереди, но потом больше не принимай.

Ничего из этого я не хочу.Насколько я понимаю, ваш список задач должен иметь возможность расти в этих системах.Веб-сервер очень прост и наивен;Я просто хочу, чтобы он старался изо всех сил при масштабировании до множества одновременных запросов, даже если его управление ресурсами состоит только из потребления вещей в очереди задач как можно быстрее.

Я подозреваю, что это потому, что основной поток должен присоединиться к другим потокам, но я немного заржавел в своем знании потоков.

Ответы [ 2 ]

0 голосов
/ 05 декабря 2011

Я обнаружил, что способ создания моего делегата способствовал блокировке в некоторой части кода. Вместо того, чтобы закрывать объект, возвращаемый SocketServer.accept, я теперь передаю этот объект в качестве параметра моему делегату. Я не знаю, почему это было решением, но теперь программа работает, как и ожидалось. Я слышал, что замыкания в версии D 1 сломаны; может быть, это как-то связано с этим.

0 голосов
/ 04 декабря 2011

а как же void append(JobD job, Args args)?из документов он работает как форма Executor.execute(Runnable) java (отправьте задачу для запуска в будущем)

обратите внимание, что здесь это очередь LIFO вместо ожидаемой очереди FIFO, поэтому выделите достаточно рабочих

...