【发布时间】:2013-03-15 14:36:41
【问题描述】:
我正在尝试实现一个服务器来处理许多 tcp 连接,根据一天中的时间从 100 到 1000 个连接/天。在阅读了很多关于每个连接线程的 c10k 问题并仅使用 epoll 之后,我决定将两者都用作线程池,并且 main 将充当调度程序,因此每个新连接都将分配给一个线程。
我有很多问题在其他任何地方都找不到答案。 以下线程安全吗?在添加新的 fd 之前我需要锁定吗?
int main ()
{
while(i < number_threads)
{
pthread_create( &id , NULL , worker , (void*) epoll_fd[i]);
i++;
}
//is it ok to add the new_sock for the epoll_fd[i] so the thread can pick it up
int y = 0;
while(1) {
new_sock = accept(...);
if (epoll_ctl(epoll_fd[y], EPOLL_CTL_ADD, new_sock, &ev) < 0)
{
print error;
}
y++;
if (y == number_threads)
y = 0;
}
}
void *worker(void *epfd)
{
epoll_wait //start waiting for event
}
【问题讨论】:
-
每天 1000 个连接?您的目标是计算尺吗?
-
将 C 标签读为 C++,编辑了我的评论
标签: c linux network-programming