IO学习记录

这两天正好聊到这个问题,就试着按自已的理解分解一下这个问题,希望可以用最简单的话说明,如果不对欢迎指证,另外,如果理解不一样,都是你对。先把保护写在前面。

在说这个之前我先想到,电脑或计算机这个东西是干什么的?如果往简单了说可能只干了三件事,读,计算,存。而这里面读和存可以统一为IO问题。

所以这是一个很大的问题,所以我们首写要接受它的复杂。不理解或很难理解是应该的。所以我们没问题,是问题的问题。

然后,我们再想IO要解决的主要问题是什么呢?

只有一个,就是快,天下武功为快不破。所以快是很难的。因为这个东西没有穷尽。什么叫快,没有标准。音速还是光速。这也只是我们认知的尽头。所以大牛们在这个道路上前赴后继,乐此不疲。

才搞出这么多概念来。另一方面不同人看问题和解决问题的角度不同,硬件工程师有硬件的解法,软件工程师有软件的解法。系统层面有系统的解法。所以这个问题要分开说。

目前主流的分类主要是占在操作系统层面上的解法。更确切的说是linux操作系统上的解法。可能会问为啥windows没这么多解法,因为它不开源呀。而且它的东西是有研发经费的。不像linux都是用爱发电的。而且window现在已经躺平了。linux的东西基本都可以拿来用了。所以什么是最好的解决方案?就是让别人解决。

回过头来说linux对io的5大分类。我先不列举,咱先从分类上讲,常说的两个维度,同步和异步,阻塞和非阻塞。有人会说了,这个不对呀。同步不就是阻塞么,非阻塞还不就是异步么。我也是这么认为。

所以为啥理科的技术不好理解,也是因为发明这些概念或者说推广这些概念的人文化基础差。句子的主要素都不说清楚,人们当然理解不了了。其实这里缺少了主语。这里有二个主体,一个是用户,一个是操作系统。

所谓同步和异步是针对系统的开放模式,操作系统是以线性流程提供接口,还是以消息回调提供接口的。如果以线性提供的那么就是我们所谓的同步,消息回调的则是异步。

(所以当你选择API的时候就已经确定了。不可能说我通过代码优化来将同步优化成异步,这个是不可能的,就像你生出来是中国人,就一定是中国人,你能改国籍但改不了血统一样)

而阻塞和非阻塞指的是用户的开发模式,这个和系统无关,是可以后天优化的。而且我们日常做的最多的就是这个。而且阻塞和非阻塞也不是性能的考量标准。不是阻塞性能就一定差,非阻塞就一定高。

但是从代码开发的角度讲阻塞更简单一点。所以用的人多,会的人也多,所以大家就觉得没意思,尤其是国内面试造火箭的现状也让大家不愿意用简单直接的方法工作。

明白了上面的道理,我们就不难理解linux的5大底层IO基础。但是这5套IO其实分类还不是这么一致的,他有一个层面的东西有不同层面的东西。喜欢乱凑搭也是程序员的恶趣味。

从维度上讲【2X2】的矩阵,4个分类,分别是同步-阻塞,同步-非阻塞,异步-阻塞,异步-非阻塞。

而这里面同步-阻塞,异步-阻塞这两个比较极端,一个非常简单,一个是业务场景要求操作系统没有做的,因为这个比较少使用。所以没什么

而另一对同步-非阻塞,异步-非阻塞是比较复杂的。再细分异步-非阻塞这个站在java程序员的角度,java不能直接操作系统api,目前JVM还不直接支持,所以什么NIO呀AIO呀都不靠边,所以也没那么多人涉猎。

C阵营好像国内也只有360的evpp是用的这个吧。我不太了解最近也用不上就不多讲了。

最多花样的就是同步-非阻塞了。也是我们要着重聊聊的。

先说5大底层分别是阻塞IO,非阻塞IO,多路复用IO,信号驱动式IO,异步非阻塞IO,这就像说人的分类是男人,女人,老人,孩子一样。乍一看好像也没问题,但是一个老男人到底该站再哪?哈哈。

这个也是,先排除一个【信号驱动式IO】,这个万年不用的东西,在这里完全是增加难度的。就是故意找茬。

另一个阻塞IO这个也排除了。最基础么,大家都很清楚了。

异步非阻塞IO,这个上面也说了,就不再累述了。

剩下这两非阻塞IO,多路复用IO。这两其实都是同步-非阻塞的。他们不是排他关系,而的递进关系。

多路复用是解决IO管理的问题。阻塞的IO为啥不能多路复用呢?因为它阻塞了呀。都阻塞了还咋复用。

多路复用这块就是三联机select -> poll -> epoll。3套实现。也是递进关系的,只是在复用的基础上越来越强大也越复杂而已。

今天太晚了。先不写了。下次随缘更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值