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

本文从面试角度出发,探讨Redis、Nginx等使用IO多路复用模型的底层原理。内容包括BIO、NIO的概念,多路复用的工作方式,epoll在Redis和Nginx中的不同应用,以及零拷贝技术在提高效率上的作用。
摘要由CSDN通过智能技术生成

从底层了解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)");
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值