操作帷幄之中,运维千里之外
从图中可以看到,IO复用中复用的就是一个负责监听管理这些IO事件的线程。之所以可以实现一个线程管理成百上千个IO事件,是因为大部分时间里某个时刻只有少量IO事件被触发。 大概就像这样:草原上的一只大狗可以看管几十只绵羊,因为大部分时候只有个别绵羊不守规矩乱跑,其他的都是乖乖吃草。
3. 网络框架设计要素 那什么又是IO事件呢?事件可以理解为一种状态或者动作,也就是状态的迁移会触发一种相应的动作。网络IO的事件通常包括:
理解可读可写事件是非常有必要的,一般来说一个socket大部分时候是可写的,但是并不是都可读。可读一般代表是一个新连接或者原有连接有新数据交互,对于服务端程序来说也是重点关注的事件。 大白: 就咱这觉悟,心里有工作,哪里都是办公桌,不要拘泥于形式嘛。 明显能感觉得到小黑哥最近好像比较累,之前眼里bulingbuling闪的光是看不到了。 大白: 下午去面的哪家?啥岗位?咋样? 小黑: 是一家做自动驾驶的创业公司,网站是看团队介绍还不错,就去看看了,这次没咋准备,很多问题其实都熟悉,但是回答的不到位。 大白: 哦,明白了,那就是当时理解的不到位,稀里糊涂过去了,现在忽然问起来,想不起重点。 小黑: 差不多吧,问我都做过哪些高性能的网络框架模型,也就是IO和事件驱动那一套。 话说完,小黑喝了一大口啤酒,大白看出了小黑心里有一些落寞。毕竟在帝都这个地方竞争和工作压力,以及生活琐事都一直围绕着我们,但是金钱和好运都巧妙地避开了自己... 想到这里,大白也深深喝了一大口,我命由我不由天,开整! 大白:黑哥,你说这个问题确实不好回答,全是术语和略带歧义的东西,我觉得我们抓住本质去阐述就好。 小黑:来,请开始你的表演,我学习学习。 大白决定和小黑好好聊聊,Linux开发中常用的高性能网络框架中的一些事儿,火锅的映衬下让夜色和天气都不那么寒冷了。 通过本文你将会了解到以下内容:
2. IO事件和IO复用 2.1 什么是IO事件 IO指的是输入Input/输出Output,但是从汉语角度来说,出和入是相对的,所以我们需要个参照物。这里我们的参照物选择为程序运行时的主存储空间,外部通常包括网卡、磁盘等。有了上述的设定理解起来就方便多了,我们来一起看下: IO的本质是数据的流动,数据可以从网卡到程序内存,也可以从程序内存写到网卡,磁盘操作也是如此。 所以可以把常见的IO分为:
(编辑:南通站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |