创建 pthreads 线程池来处理 get 请求

标签 c networking pthreads threadpool

我很难相信这个问题没有答案或教程,但我很难在任何地方找到答案或教程!

我必须(并且已经)构建一个多线程服务器来处理 C 中的 GET 请求。 对于满分,这需要使用线程池。目前我的主线程接受连接并将它们传递给新线程。

我可以在网上找到一些用 C 语言实现的线程池,但事实证明,来自 Java 背景的人理解它们很困难。他们似乎都使用任务队列。

考虑到您可以告诉队列连接的监听调用,这似乎是不必要的。 我在某个地方看到accept是线程安全的(据说我也听说POSIX说安全它更安全?) 这是一个明智的做法吗?或者每个线程等待接受而不是停止执行直到通过连接,开销会更高吗?

如果是这种情况,我将如何在 C 中执行此操作?我想我需要保留一个线程安全的数据结构,存储指向每个线程的指针和一个指示它们是否忙的值? 有某种方法可以重新启动线程并向其传递连接吗?但我不知道如何做到这一点,并且在互联网上找不到任何简单的教程。

任何建议或教程链接将不胜感激!

谢谢

最佳答案

Accept()thread-safe .

实际上,您所描述的是一种使用线程池实现套接字服务器的优雅方法 - 在所有线程中调用 accept() ,并且操作系统将在以下情况下仅负责唤醒一个线程:连接到达。干得好,当我必须实现这些事情时,我从未真正考虑过这个选项。

据我所知,同时在多个线程中调用 accept() 并没有真正的开销 - 所有线程都会休眠,直到可以接受连接,因此它们不会有效地消耗任何 CPU 时间。

关于创建 pthreads 线程池来处理 get 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15033376/

相关文章:

c++ - 将矩阵应用于图像,寻求性能改进

c - 如何在 main 之前调试崩溃?

c++ - 使用ASIO捕获大量UDP数据包

c - 检测截止时间线程抢占

android - 带有 pthread 析构函数的 c++ thread_local 析构函数

c - pthread_join 阻止我的代码

c - 找不到导出命令(使用 putty)

C 套接字 - 在选择时被阻止

c++ - C++14 中 for 循环中的并行网络下载

python - 使用python套接字在两台计算机之间进行通信