加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长资讯 > 评论 > 正文

从底层聊下IO多路复用模型?这不有嘴就会

发布时间:2021-04-01 10:12:59 所属栏目:评论 来源:互联网
导读:操作系统的层面上来谈 BIO 当我们开机的时候,首先被加载进内存的是我们的Kernel(内核),内核是用于管理我们的硬件的,同时内核还会创建一个GDT表,然后划分两个空间(用户空间和内核空间),同时空间中的内容是开启了保护模式,无法被修改的。 同时还有一个CP

操作系统的层面上来谈

BIO

当我们开机的时候,首先被加载进内存的是我们的Kernel(内核),内核是用于管理我们的硬件的,同时内核还会创建一个GDT表,然后划分两个空间(用户空间和内核空间),同时空间中的内容是开启了保护模式,无法被修改的。

同时还有一个CPU的概念,CPU有自己的指令集,并且指令集是分了几个级别的,分别是从0~3的,Kernel属于0级别。APP只能用级别为3的指令集。

从上面我们可以知道,我们的应用程序是无法直接访问我们的Kernel的,也就是程序不能直接访问我们的磁盘,声卡,网卡等设备,只有内核才可以访问,那我们怎么办?

只有APP通过调用Kernel提供的 syscall(系统软中断和硬中断)来获取硬件中的内容。

软中断

硬中断:硬中断指的是我们的键盘,按下一个按键的时候,就会触发我们的硬中断,也就是内核会有一个中断号,然后得到一个callback的回调函数

说到这里,其实就是为了引出一个 概念,就是 IO 和 内核之间的成本问题


 

述的模型,就是BIO的通信,是这里面有很多阻塞,我们只能够通过多个线程来避免主线程的阻塞。但是从上面我们可以知道,如果有大量地连接过来,那服务器需要创建很多个线程与之对应,并且线程的创建也是需要消耗资源的,因为线程使用的栈是独占的(栈大小默认1MB),同时CPU的资源调度也是需要浪费。

最根本的原因就是因为 BIO是阻塞的,才会造成上面的问题。

NIO

因为BIO存在线程阻塞的问题,后面就提出了NIO的概念,在NIO中,有C10K的问题,C10K = 10000个客户端。但是在和你连接的服务器中,其实没有多少给你发送数据了,所以我们需要做的就是,每当有人发送消息的时候,我才和它进行连接。

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读