2013-11-05 107 views
1

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

+1

栈(单链表)应该没问题。你需要做的就是当你需要的时候弹出一个,当你完成它时再把它推回去。不需要队列或循环或双向链接列表。 –

+1

循环队列也可以做到这一点,看看这个漂亮,轻量级的库:[threadpool](https://github.com/mbrossard/threadpool)。 – deltheil

+0

您可以利用最近在PHP中开发的[**应用程序服务器**](http://appserver.io),该应用程序服务器又使用C语言。 – webblover

回答

1

您可以使用任何线程安全的队列。但是,如果该Web服务器将要承担重任,那么使用基于数组的无锁队列可能会更好,因此您只需要有时分配数组,(michael和scott的队列基于节点,所以在幼稚的实现中,每次进入入队时都必须分配节点,并将它们释放到出队列表中)。 (所以要回答,基于阵列的队列(而不是deque)在我看来是更好的,因为它们在不同的任务中是公平的。)

我建议你使用队列而不是deque。 (尽管盗窃工作使用deque,但你希望公平地参加客户端,所以deque,因为它的行为像堆栈,所以第一个请求将是最后一个请求。) 您可以看到无锁并发队列的这个页面(这是我认为最先进的技术) http://mcg.cs.tau.ac.il/projects/lcrq/