100,000件以上のリクエストを取得する予定がありますが、少なくとも100件は同時に発生します。私がリクエストを得るたびに、新しいスレッドを作成し、それが完了したらpthread_exit()
を使って破棄します。 pthread_detach
を使用して99%の成功率を得ています。これよりも良い方法がありますか?Cで同時に100,000件のリクエストを処理する方法
pthread_t hilo;
// infinite loop
while ((client_sock = accept(server_sock, (struct sockaddr *) &client_sockaddr, &len))) {
struct ClientSocket socks;
// some code...
pthread_create(&hilo, NULL, func, &socks);
pthread_detach(hilo);
printf("\nSocket is listening for the next request...\n");
}
私はpthread_join
は、スレッドの制限に達することなくリソースを活用するためのより良い方法だろう聞いたが、私はそれをやっている方法は、同時ではありません。
pthread_t hilo;
// infinite loop
while ((client_sock = accept(server_sock, (struct sockaddr *) &client_sockaddr, &len))) {
struct ClientSocket socks;
// some code...
pthread_create(&hilo, NULL, func, &socks);
pthread_join(hilo, NULL); // it stops the main thread
printf("\nSocket is listening for the next request...\n");
}
いずれかのアイデアがあります。
ここには良い記事があります:http://www.kegel.com/c10k.html –
スレッドの作成と破棄は非常に重い操作です。スレッドプールの使用を検討しましたか? –
'pthread_joinがもっと良い方法になると聞いた...'いいえ、pthread_joinは何もしない方が良い方法です:( –