NoteDeep

特点:

1.阻塞:
解决accept、recv傻阻塞的问题
send、recv、accept(复制到缓冲区的过程是阻塞的--执行阻塞, select不解决)
2.实现多个客户端连接, 和多个客户端分别通信
3.用于服务器, 客户端可以把recv单独放在一个线程中

总结:

1.select模型代码, 会有细节优化, 结构也可能稍有变化, 但是原理不会变
2.核心是参数2, 解决的是accept和recv傻等的问题, 不解决执行阻塞

3.流程:

socket集合
select遍历集合, 查看是否有响应
返回值>0有相应:
可读:accept、recv
可写:send(不是一定要在这里调用send)
异常:getesockopt
返回值==0:无响应
SOCKET_ERROR


4.select是阻塞的、同步的
不等待:执行阻塞
半等待:执行阻塞+软阻塞(指定阻塞的时间)
全等待:执行阻塞+硬阻塞(死等)

都差不多, select可以等待所有的socket, 只要有响应就可以处理。

问题:

存在执行阻塞--select、recv、accept、send
异步select模型解决了select函数的执行阻塞问题

优化:

加入线程等

参考:












评论列表

    特点:
    总结:
    问题:
    优化:
    参考: