我想写一个多线程的网络服务器,我应该使用线程池。我可以为线程池使用队列吗?如果可以,你建议队列是循环的还是双链表的?哪一个更适合我的网络服务器实现?如果队列不是一个好的选择,线程池推荐什么数据结构?
最佳答案
您可以使用任何线程安全的队列。 但是如果那个 web 服务器要承受重负荷,使用基于数组的无锁队列可能会更好,这样你有时只需要分配数组,(michael 和 scott 的队列是基于节点的,等等天真的实现你必须在每次入队时分配节点,并在出队时释放它们)。 (所以回答一下,我认为基于数组的队列(而不是双端队列)更好,因为它们在不同的任务中是公平的。)
我建议你使用队列,而不是双端队列。 (尽管工作窃取使用双端队列,但您希望公平地接待客户。所以双端队列,因为 ot 的行为就像一个堆栈,第一个请求将是最后一个回答。) 您可以查看此页面以获取无锁并发队列(我认为这是最先进的) http://mcg.cs.tau.ac.il/projects/lcrq/
关于c - 多线程 Web 服务器的线程池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19779999/