Ich erwarte 100.000 Anfragen mindestens 100 von ihnen würden gleichzeitig sein. Jedes Mal, wenn ich eine Anfrage erhalte, erstelle ich einen neuen Thread und zerstöre ihn, sobald er fertig ist, mit pthread_exit()
. Mit pthread_detach
bekomme ich 99% Erfolgsquote. Gibt es einen besseren Weg als das?So behandeln Sie 100.000 Anfragen gleichzeitig in C
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");
}
Ich hörte pthread_join
wäre ein besserer Weg, um Ressourcen zu nutzen, ohne den Faden Grenze erreicht, aber die Art, wie ich es tue, ist nicht gleichzeitig.
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");
}
Irgendwelche Ideen würden geschätzt werden!
Hier ist ein guter Artikel zu lesen: http://www.kegel.com/c10k.html –
Erstellen und Löschen von Threads ist eine sehr schwere Operation. Haben Sie überlegt, Thread-Pools zu verwenden? –
'Ich hörte pthread_join wäre ein besserer Weg ...' Nein, fast nie ist pthread_join eine bessere Art, etwas zu tun :( –