最近在开发一个叫做medis的项目,虽然进度很缓慢,但是可以不断的去思考如何可以做的更好。
对于网路IO中的事件处理模式最常见的方式是reactor模式,这种模式一般是每一个线程一个poller或者多个线程共享一个poller。这种事件处理模式是将准备就绪的Socket放入队列交给业务线程去读取数据和处理。
而在Windows的开发中有一个非常特别的poller叫做IOCP,它的特别之处在什么地方呢?IOCP的工作方式,是将一个Socket和一个Buffer关联起来,然后发起读或者写的操作。当IOCP接到这个请求后,它会记录Socket和Buffer的关联,当Socket上相应的可读或可以事件发生时,就将Buffer中的数据填充好或发送出去。当完成上面那些工作后IOCP直接发送信号通知应用数据已经被读取了或者已经被发送了,这样应用面对的是数据而不是一个Socket。这样会让应用更加清晰,同时IOCP这么实现减少了不必要的系统调用。
先写到这里,Proactor在Unix/Linux上的意义还没有想的非常清晰。
时间: 2024-11-11 12:15:25