今天我们来进行架构探险:从零开始写分布式服务框架,你能学会吗?(12)
非阻塞I/O模型
(3) I/O复用模型: Linux提供select/poll 进程通过将一个或多个fd传递给select或poll系统调用 , 阻塞在select;这样select/poll可以帮我们侦测许多fd 是否就绪 。 但是select/poll是顺序扫描fd是否就绪的 , 而且支持的fd数量有限 。 Linux还提供了-一个epoll系统调用 , epoll 基于事件驱动方式 , 而不是顺序扫描 , 当有fd就绪时 , 立即回调函数rollback , 如图6-3所示 。
I/O复用模型
(4)信号驱动异步I/O 模型:首先开启套接口信号驱动I/O功能 , 并通过系统调用sigaction安装一-个信 号处理函数(此系统调用立即返回 , 进程继续工作 , 它是非阻塞的) 。
当数据报准备好被读时 , 就为该进程生成一个SIGIO信号 。 随即可以在信号处理程序中调用recvfrom来读数据报 , 并通知主循环数据已准备好被处理 。 也可以通知主循环 , 让它来读数据报 , 如图6-4所示 。
(5)异步I/O模型:告知内核启动某个操作 , 并让内核在整个操作完成后(包括将数据从内核复制到用户自己的缓冲区)通知我们 。 这种模型与信号驱动模型的主要区别是信号驱动I/O由内核通知我们何时可以启动一个I/O操作;异步I/O模型由内核通知我们I/O操作何时完成 , 如图6-5所示 。
推荐阅读
- lpl|不着急“武统”,可不是因为不敢:恰恰证明我们是更强势的一方
- |冰雪传奇:平民玩家四转后如何打金
- 电子竞技|世界赛结束了,细说那些年我们追过的电竞小说
- 明日之后|明日之后“人尸大战”展现中国精神:人类的未来我们共同争取
- lpl|LPL给Jankos发奖状:为了表达谢意,我们制作了这个奖状
- team solomid|TSM老板透露比尔森离队真因:他想组队的选手我们买不到
- 亚运会|亚运会将拉开帷幕,我们的LPL有几分胜算?LCK徐秀是否出战?
- 不义联盟2|TES苏沫前女友骚操作,差点成就AG,网友怒吼:我们要看电竞春晚
- 徐晃|三国杀:徐家帮派帮徐家,徐盛脸上笑哈哈
- 三国杀|三国杀:希望我们有赤诚的喜欢和无限的浪漫,像三国杀的原画那样