我似乎无法在任何地方找到明确的答案。
在客户端,如果我正在编写代码来处理来自服务器的回调方法,那么这是在IOCP线程上执行的吗?如果是,我希望我们应该保持该回调方法的实现高效和快速。如果需要进行任何阻塞调用,那么将该回调响应排队到线程池是有意义的。
有人可以在此确认/否认我的假设。
感谢。
答案 0 :(得分:0)
如果您在服务器中使用IO完成端口(例如,可能在需要模拟1000个客户端的服务器测试系统上),那么您负责提升用户空间线程池以等待完成港口。这个游泳池可以足够大,以允许许多客户和所以避免第二阶段排队到另一个线程池。
如果您正在使用重叠IO完成回调,则回调由发出ReadFileEx的同一线程执行(假设您的线程正在等待可警告的等待,(blahEx调用),允许APC回调)。如果这个线程正在处理多个客户端,那么是的,这个线程可能会忙碌,你应该将缓冲区/套接字/上下文/任何内容排队到线程池,以便处理缓冲区并发出任何回复。
答案 1 :(得分:0)
据我了解,是的,它是在IOCP上。我认为,因为服务器本身处于IOCP的中间(因为它正在调用你的回调),并且由于客户端处于IOCP的中间,所以最好快速离开那里。
我正处于同一问题的中间,我认为主要是回调被用作“事件”,并且通常被卸载到UI线程,或者是不同的工作Q.