这是用VC ++编写的Windows服务器应用程序。我将使用threadpool来处理进入服务器的各种请求对象。显然,当一个线程正在处理特定请求并将其响应写入套接字时,其他线程必须等到它完成。我担心这可能不是使用线程池的有效方法。
因此,我的问题是: 如果线程池中的线程正在等待释放线程同步对象,则使用线程池不是有效的方法。有什么方法可以避免这种情况吗? (可能事先知道在分配线程工作之前对象是否空闲)
答案 0 :(得分:1)
你可以只有一个线程写入套接字。其他线程将其数据放入队列,输出线程从队列中读取并将数据写入套接字。
当然,假设线程不需要等待来自套接字的响应才能继续。
此外,它实际上取决于您期望线程在套接字上等待的频率和持续时间。如果它只是偶尔发生,那么没有问题。线程将以最大速率处理,并且很少他们必须等待另一个线程在发送之前完成发送。但是如果线程花了很多时间等待套接字,那么你可能想找到另一种方法来做事。具有处理套接字的专用线程的输出队列运行良好,并且很容易设置。