Redis面试系列:从底层了解IO多路复用模型

从底层了解IO多路复用模型

前言

当我们去面试的时候,问到了 redis,nginx,netty他们的底层模型分别是什么?

  • redis -> epoll
  • nginx-> epoll
  • netty-> epoll?

需要从操作系统的层面上来谈

BIO

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

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

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

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

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

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

image-20200701203511839

/**
 * 服务器读取文件
 * @author: 陌溪
 * @create: 2020-07-01-20:40
 */
public class TestSocket {
   
    public static void main(String[] args) throws IOException {
   
        ServerSocket server = new ServerSocket(8090);
        System.out.println("step1: new ServerSocket(8090)");
 
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值