如何在C中同时处理100,000个请求
我期望获得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");
}
任何想法,将不胜感激!
回答:
每次我得到的请求,我创建一个新的线程,并摧毁它,一旦它完成
别:它不一个聪明的做法,因为线程的创建是一个重量较轻的操作。
我听说pthread_join会是一种更好的方式来利用资源而不会达到线程限制,但我做这件事的方式并不是一致的。
正确。无论何时你看到有人在做pthread_create
之后立即跟着pthread_join
,你都可以知道他们不知道他们在做什么。只需简单地直接拨打func
即可实现完全相同的结果(效率更高)。
任何想法,将不胜感激!
您需要一个生产者 - 消费者队列。监听线程将accept
连接并将它们排入一个(大小受限)线程池中的其他线程。其他线程将出列一项工作,并对该项目执行func
。然后回到下一个项目,等等。
这里是example生产者/消费者实施。但是你可以通过“生产者消费者队列”搜索找到许多其他人。
以上是 如何在C中同时处理100,000个请求 的全部内容, 来源链接: utcz.com/qa/259611.html