我想写一个多线程的网络服务器,我应该使用一个线程池。我可以为线程池使用队列吗?如果可以,你建议队列是循环的还是双链表?哪一个更适合我的 Web 服务器实现?如果队列不是一个好的选择,线程池推荐什么数据结构?
问问题
614 次
1 回答
1
您可以使用任何线程安全的队列。但是,如果该 Web 服务器将承担重任,最好使用基于数组的无锁队列,这样您有时只需要分配数组,(迈克尔和斯科特的队列是基于节点的,等等幼稚的实现,您必须在每次入队时分配节点,并在出队时释放它们)。(因此,在我看来,基于数组的队列(而不是双端队列)更好,因为它们在不同的任务中是公平的。)
我建议你使用队列,而不是双端队列。(尽管工作窃取使用双端队列,但您希望公平地参与客户端。因此,双端队列,因为 ot 的行为类似于堆栈,所以第一个请求将是最后一个响应。)您可以查看此页面以获取无锁并发队列(this我认为是最先进的) http://mcg.cs.tau.ac.il/projects/lcrq/
于 2014-02-26T09:44:24.573 回答