【发布时间】:2017-09-04 17:25:25
【问题描述】:
我有一个客户端-服务器应用程序,我的服务器必须并行处理每个客户端请求。所以我决定为每个请求创建线程。这样做是个好主意吗?在线程内部,我将向客户端发送响应,因此我不会为关闭线程而烦恼。
void MyThreadFunction()
{
//Process request and send response to client
//.....
//.....
return;
}
int main()
{
//.....
//.....
while(true)
{
DWORD dwThreadId;
if(!receive(clientid, data)) //API to receive data from client
break;
CreateThread(NULL, 0, MyThreadFunction, NULL, 0, &dwThreadId);
}
return 1;
}
【问题讨论】:
-
是的,它被称为多线程服务器,但通常你只是捕获连接并让线程读取和写入客户端。
-
如果没有必要,创建多个线程是可以的,但是为每个请求创建一个线程是不好的。请改用线程池。线程的创建/销毁成本很高,并且它们需要大量内存,因为每个线程都需要自己的堆栈。尽可能多地使用,但不要更多。
-
自 C++11 起你可以使用
std::thread。 -
最好使用 ThreadPool API 来避免为每个传入请求创建新线程的开销。
-
“所以我不会为关闭线程而烦恼。”你应该这样做。
标签: c++ windows multithreading