如何在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

回到顶部