M
mill666
Unregistered / Unconfirmed
GUEST, unregistred user!
看了IOCP文章,有个问题一直郁闷:
IOCP根据CPU的数量,创建CPU*2个线程来处理客户端的请求,如果我只有一个CPU,那么这个线程数就是2,我们就叫它ThreadA和ThreadB;
问题是,如果处理客户请求的过程很耗时,比如是文件传输服务器ftp,如果TheadA正在服务某个客户端ClientA,ClinetA请求传输好几百兆的数据,那么线程ThreadA就一直在为ClientA服务,说不定好几个小时哟【因为文件有好几百兆啊】,如果另外一个客户ClientB也提交了一个几百兆的文件请求,那么ThreadB为ClinetB服务,估计也是要很长时间。
如果这个时候再来一个客户端ClinetC请求,那么这个服务器拿什么线程为ClinetC服务??
这样的法,服务器不就是只能同时处理2个客户端了???
当然,我的理解是错误的,因为Iocp确实能够处理多个客户端,可是我觉得郁闷的地方就是这种处理客户端请求需要很长时间的情况下,为什么还能处理多个客户端???
我看网络上很多关于IOCP的例子都是举例echo服务器,这种服务器处理客户端请求不费时,所以线程利用率就很高。
问题是处理客户端请求 需要很长时间的情况下,怎么能处理多个客户端??
IOCP根据CPU的数量,创建CPU*2个线程来处理客户端的请求,如果我只有一个CPU,那么这个线程数就是2,我们就叫它ThreadA和ThreadB;
问题是,如果处理客户请求的过程很耗时,比如是文件传输服务器ftp,如果TheadA正在服务某个客户端ClientA,ClinetA请求传输好几百兆的数据,那么线程ThreadA就一直在为ClientA服务,说不定好几个小时哟【因为文件有好几百兆啊】,如果另外一个客户ClientB也提交了一个几百兆的文件请求,那么ThreadB为ClinetB服务,估计也是要很长时间。
如果这个时候再来一个客户端ClinetC请求,那么这个服务器拿什么线程为ClinetC服务??
这样的法,服务器不就是只能同时处理2个客户端了???
当然,我的理解是错误的,因为Iocp确实能够处理多个客户端,可是我觉得郁闷的地方就是这种处理客户端请求需要很长时间的情况下,为什么还能处理多个客户端???
我看网络上很多关于IOCP的例子都是举例echo服务器,这种服务器处理客户端请求不费时,所以线程利用率就很高。
问题是处理客户端请求 需要很长时间的情况下,怎么能处理多个客户端??