我期望獲得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做任何事情的更好方式:( –