私は、1日の時刻に基づいて1日あたり100〜1000接続の多くのtcp接続を処理するサーバーを実装しようとしています。接続ごとのスレッドに関するc10k問題について多くのことを読み、epollのみを使用した後、スレッドのプールとして両方を使用することにしました。メインはディスパッチャーとして機能するため、新しい接続はそれぞれスレッドに割り当てられます。
他では答えが見つからない質問がたくさんあります。次のスレッドは安全ですか?新しい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
}