请问WSARecv & Recv 的区别
请教WSARecv & Recv 的区别
WSARecv & Recv
一直没搞懂这俩区别(非阻塞 & 阻塞)
Recv 是在比如说,客户端发来1024K数据,,,服务端以10K/S (不要纠结这速度) 接收,然后Recv要在接收完这1024K数据后才返回么?
WSARecv 同样速度,是马上就返回了~~~~
还有,帮忙以通俗点的语句解释一下,WSARecv 的各参数~~~MSDN的好拗口,,,搞得我不知道怎么回事了~~~
------解决方案--------------------
recv操作默认是阻塞的,没有数据到来,所在的线程会一直被挂机。
而WSARecv是非阻塞的,只是向iocp队列投递了一个recv操作就立刻返回了,线程继续向下执行。
而你要做的是不停的从iocp完成队列获取已经完成的操作,并处理获得的数据。这个投递操作的线程是并行的。
------解决方案--------------------
对于应用来说,发送的时候,采用非阻塞,不用等发完就可以返回了。当然用阻塞也可以,但当数据量很大的时候,程序有假死现象。
接收的时候,用阻塞比较简单。注意为了防止程序假死现象,在另一个线程里面读。
WSARecv & Recv
一直没搞懂这俩区别(非阻塞 & 阻塞)
Recv 是在比如说,客户端发来1024K数据,,,服务端以10K/S (不要纠结这速度) 接收,然后Recv要在接收完这1024K数据后才返回么?
WSARecv 同样速度,是马上就返回了~~~~
还有,帮忙以通俗点的语句解释一下,WSARecv 的各参数~~~MSDN的好拗口,,,搞得我不知道怎么回事了~~~
------解决方案--------------------
recv操作默认是阻塞的,没有数据到来,所在的线程会一直被挂机。
而WSARecv是非阻塞的,只是向iocp队列投递了一个recv操作就立刻返回了,线程继续向下执行。
而你要做的是不停的从iocp完成队列获取已经完成的操作,并处理获得的数据。这个投递操作的线程是并行的。
------解决方案--------------------
对于应用来说,发送的时候,采用非阻塞,不用等发完就可以返回了。当然用阻塞也可以,但当数据量很大的时候,程序有假死现象。
接收的时候,用阻塞比较简单。注意为了防止程序假死现象,在另一个线程里面读。