栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

I/O演进

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

I/O演进

在演进过程中,从两方面 操作系统和编程语言都做出了努力

一方面 减少内存复制

以前的路径

堆空间->堆外空间->内核空间->输入设备

零拷贝

DirectBuffer(用户态) 实现了 代码直接操作堆外空间,减少了堆内到堆外的内存复制

MappedByteBuffer 能将内核空间和堆外空间映射到同一片物理内存地址,减少了堆外空间到内核空间的内存复制

以此来实现零拷贝

另一方面 阻塞问题

发展历程

阻塞I/O->非阻塞I/O->I/O复用->信号驱动式I/O->异步I/O

阻塞I/O->非阻塞I/O :都是基于用户态去等待或去轮询,每一个链接对应一个线程,对cpu不友好

I/O复用中 将用户态的轮询转到内核态

linux 的select/poll/epoll

select:轮询,数量1024限制,基于fd_set

poll:轮询,无数量限制,基于fd_set

epoll:事件驱动,基于红黑树

信号驱动式I/O,不支持TCP(TCP中有多种信号,好像是7种),无法区分

异步I/O linux不支持

现在都是基于I/O复用去做的实现

linux支持select/poll/epoll 然后,

编程语言java NIO基于select/poll/epoll实现了Selector 然后,

Reactor线程模型基于Selector实现

Reactor 分为Acceptor,Reactor,Handler

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/940662.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号