IOCP的理解?
最近想写个网络聊天软件。
想用IOCP写服务器端的。看了几天了。奈何第一次搞IOCP,看着确实头痛。
理解不够,完全没法下手写代码。
也下了别人的代码看了。
谁给说说帮助理解。谢啦。
[解决办法]
IOCP就是一个异步的队列,就是把一个SOCKET关联到一个所谓的完成端口, 然后就向套接字投递读写请求
这些请求不一定是立即完成的,所以你需要在自己的一个或者多个工作线程里等待完成端口的完成事件
然后处理之,如果想屏蔽这些复杂性可以使用boost asio 让你更关注自己的业务逻辑 而不是纠结在IOCP
的实现及其原理上。
[解决办法]
所有的网络操作,都要投递了overlapped后才能在操作完成时通过GetQueuedCompletionStatus得到完成的状态
[解决办法]
我的理解就是你创建的SOCKET由完成端口来监控你的收发状态!
[解决办法]
IOCP其实理解成事件触发器就ok了。
主要关注几个事件:
accept, recv, send,并在此基础上扩展其他的事件,包括断线等。
[解决办法]
1楼言简意赅,说的没错。
[解决办法]
IOCP是Windows下IO异步机制的牛逼做法
你要想某个设备能够进行高效的IO操作 就把这个设备句柄和IOCP关联起来 在这个设备创建时加上FILE_FLAG_OVERLAPPED属性
创建两倍CPU数目的线程来弄GetQueuedCompletionStatus
IOCP的设计初衷是和线程池配合使用的