【问题标题】:Thread Pool for Multi-Threaded Webserver多线程 Web 服务器的线程池
【发布时间】:2013-11-15 19:06:43
【问题描述】:

我想写一个多线程的网络服务器,我应该使用一个线程池。我可以为线程池使用队列吗?如果可以,你建议队列是循环的还是双链表?哪一个更适合我的 Web 服务器实现?如果队列不是一个好的选择,线程池推荐什么数据结构?

【问题讨论】:

  • 一个栈(单链表)应该没问题。您需要做的就是在需要时弹出一个,并在完成后将其推回。不需要队列、循环或双向链表。
  • 循环队列也可以解决问题,请参阅这个不错的轻量级库:threadpool
  • 您可以使用application server 最近用 PHP 开发的,而后者又使用 C 语言。

标签: c multithreading pthreads queue threadpool


【解决方案1】:

您可以使用任何线程安全的队列。 但是,如果该 Web 服务器将承担重任,最好使用基于数组的无锁队列,这样您有时只需要分配数组,(迈克尔和斯科特的队列是基于节点的,等等幼稚的实现,您必须在每次入队时分配节点,并在出队时释放它们)。 (因此,在我看来,基于数组的队列(而不是双端队列)更好,因为它们在不同的任务中是公平的。)

我建议你使用队列,而不是双端队列。 (尽管工作窃取使用双端队列,但您希望公平地参与客户端。因此,双端队列,由于 ot 的行为类似于堆栈,第一个请求将是最后一个响应。) 您可以查看此页面以获取无锁并发队列(我认为这是最先进的) http://mcg.cs.tau.ac.il/projects/lcrq/

【讨论】:

    猜你喜欢
    • 2011-07-14
    • 2010-11-29
    • 1970-01-01
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 2018-09-03
    相关资源
    最近更新 更多