关于IOCP同时投递多个IO的问题?


小弟在学习IOCP服务器编程.问一下各位前辈,
一般在IOCP中,对于一个TCP socket有没有必要同时投递多个WSASend或者是WSARecv?
如果我自己控制一个发送队列,我WSASend完成一个才发送下一个这样行不行?
我觉得投递多个应该会提升通信效率,如果我完成一个发送一个会不会导致效率过低?
求指点

网络编程

dgwnb 12 years ago

1.异步发送可以一个时间段内投递多次
TCP可以异步发送数据,因此你说的同时投递多个IO的情况是可以的,但是有一点需要清楚,TCP是流式的,接受端也是按照该顺序来接收的。因此,需要是在满足你程序要求的数据排列顺序的情况下投递的,也就是可以在数据发送后没有收到确认成功的情况下再次发送数据,但是基本的顺序需要保障,不然就会引起程序的逻辑错误。
2.异步接收在确保知道所获得数据顺序的情况下也是可以的
这样做并不能提高程序的效率,要提高效率,需要在收到数据的处理环节进行。

多个同时进行的接收和发送事件对于提高速度不是一个比较好的方式,根据实际情况可以采取不同的方式,比如把多次发送变成一次发送,文件一次性发送等。

封印的创世神 answered 12 years ago

Your Answer