c - 多线程 Web 服务器的线程池

标签 c multithreading pthreads queue threadpool

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

最佳答案

您可以使用任何线程安全的队列。 但是如果那个 web 服务器要承受重负荷,使用基于数组的无锁队列可能会更好,这样你有时只需要分配数组,(michael 和 scott 的队列是基于节点的,等等天真的实现你必须在每次入队时分配节点,并在出队时释放它们)。 (所以回答一下,我认为基于数组的队列(而不是双端队列)更好,因为它们在不同的任务中是公平的。)

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

关于c - 多线程 Web 服务器的线程池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19779999/

相关文章:

java - 如何通过等待/通知编写保证死锁

python - 使用 `thread.join()` 时多线程卡住

c - 为什么在C语言中运行时赋值(使用scanf)时,值不能正确存储在指针中?

c - 如何交换单位矩阵的第一行和最后一行?

c - 程序的虚拟地址空间有多大?

使用 pthread 时,使用全局变量的 C++ 显示比指针慢 100%?

linux - 信号量信号与互斥锁

c++ - 使用扩展 POSIX 语法的 C 正则表达式与 C++ 正则表达式中的不同行为

malloc 失败会导致死锁或竞争条件吗?

C++:在类中使用静态函数从 main 创建 pthread 时,Solaris Studio 中出现警告(时代错误)