我用C++写了个本地代理服务器,目前使用的是即时创建,即时销毁的方式使用多线程的,每一个HTTP请求创建一个线程,交换数据的时候创建一个线程(即一个线程向客户端取数据向服务端发,一个线程向服务端取数据向客户端发),这些线程处理任务的时间都非常短,处理完后即CloseHandle销毁了。但有时候并发请求数多了以后,感觉还是有点延迟。这种情况下,是不是采用线程池比较好?
闭关修行中......
http 요청 처리에 시간이 많이 걸리는 경우 각 http 요청에 대해 스레드를 생성하는 것이 좋습니다. 그런데 현재 상황은 작업을 처리하는 시간이 매우 짧아 스레드를 생성하고 소멸하는 데 대부분의 시간이 소요됩니다.
스레드 풀을 사용하여 작업 대기열을 처리할 수 있습니다. 아래 구현을 참고하실 수 있습니다. C 11 단순 스레드 풀 코드 읽기 http://www.cnblogs.com/oloroso/p/5881863.html
스레드 생성 및 소멸에 따른 오버헤드가 매우 높으며, 스레드가 너무 많으면 메모리 사용량도 매우 높아집니다. 4세대 i7 DDR5에서는 초당 1000단계의 생성과 파괴만 완료할 수 있는 것으로 추정됩니다. 이 오버헤드는 구성 및 플랫폼에 따라 다릅니다.
동일한 구성으로 std::condition_variable 및 std::mutex로 구현된 스레드 풀은 초당 수백만 번의 동기화를 쉽게 완료할 수 있습니다.
필요한 특정 시간을 테스트하는 간단한 프로그램을 작성할 수 있습니다. 스레드 풀을 사용하는 것이 좋습니다.
갑작스러운 요청을 방지하려면 스레드 풀을 사용하여 비즈니스 요청에 따라 스레드 수를 미리 할당해야 합니다. 스레드 풀의 작동은 비동기식이므로 스레드 리소스에 대한 경쟁이 크게 줄어듭니다.
http 요청 처리에 시간이 많이 걸리는 경우 각 http 요청에 대해 스레드를 생성하는 것이 좋습니다.
그런데 현재 상황은 작업을 처리하는 시간이 매우 짧아 스레드를 생성하고 소멸하는 데 대부분의 시간이 소요됩니다.
스레드 풀을 사용하여 작업 대기열을 처리할 수 있습니다.
아래 구현을 참고하실 수 있습니다.
C 11 단순 스레드 풀 코드 읽기 http://www.cnblogs.com/oloroso/p/5881863.html
스레드 생성 및 소멸에 따른 오버헤드가 매우 높으며, 스레드가 너무 많으면 메모리 사용량도 매우 높아집니다. 4세대 i7 DDR5에서는 초당 1000단계의 생성과 파괴만 완료할 수 있는 것으로 추정됩니다. 이 오버헤드는 구성 및 플랫폼에 따라 다릅니다.
동일한 구성으로 std::condition_variable 및 std::mutex로 구현된 스레드 풀은 초당 수백만 번의 동기화를 쉽게 완료할 수 있습니다.
필요한 특정 시간을 테스트하는 간단한 프로그램을 작성할 수 있습니다. 스레드 풀을 사용하는 것이 좋습니다.
갑작스러운 요청을 방지하려면 스레드 풀을 사용하여 비즈니스 요청에 따라 스레드 수를 미리 할당해야 합니다. 스레드 풀의 작동은 비동기식이므로 스레드 리소스에 대한 경쟁이 크게 줄어듭니다.