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

时间:2013-02-22 21:21:23

标签: c networking pthreads threadpool

我觉得很难相信没有这方面的答案或教程,但我很难在任何地方找到答案!

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

我可以在c中找到一些线程池的实现,但是从Java背景中了解它们是很困难的。他们似乎都使用任务队列。

考虑到你可以告诉对队列连接的listen调用,这似乎是不必要的。 我看到某处接受是线程安全的(说我也听到POSIX说安全它更安全吗?) 这是一种明智的做法吗?或者在每个线程等待接受而不是停止执行直到传递连接之前,开销会更高吗?

如果是这样的话我会怎么做呢?我假设我需要保持一个线程安全的数据结构,存储指向每个线程的指针和一个指示它们是否忙碌的值? 并有一些方法来重新启动线程并传递一个连接?但我不知道如何做到这一点,在互联网上找不到任何简单的教程。

非常感谢任何有关教程的建议或链接!

由于

1 个答案:

答案 0 :(得分:2)

Accept()thread-safe

实际上你所描述的是使用线程池实现套接字服务器的一种优雅方式 - 在所有这些中调用accept(),并且操作系统将在连接到达时只关注一个线程。干得好,当我不得不实施这些事情时,我从未真正想过这个选项。

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