您现在的位置是:主页 > 数据库技术 > 数据库技术

I/O模型的相关问题有哪些

IDCBT2022-01-06服务器技术人已围观

简介这篇文章主要讲解了“I/O模型的相关问题有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“I/O模型的相关问题有哪些”

这篇文章主要讲解了“I/O模型的相关问题有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“I/O模型的相关问题有哪些”吧!

一、关于I/O模型的问题

  最近通过对ucore操作系统的学习,让我打开了操作系统内核这一黑盒子,与之前所学知识结合起来,解答了长久以来困扰我的关于I/O的一些问题。

  1. 为什么redis能以单工作线程处理高达几万的并发请求?

  2. 什么是I/O多路复用?为什么redis、nginx、nodeJS以及netty等以高性能著称的服务器其底层都利用了I/O多路复用技术?

  3. 非阻塞I/O为什么会流行起来,在许多场景下取代了传统的阻塞I/O?

  4. 非阻塞I/O真的是银弹吗?为什么即使在为海量用户提供服务的,追求高性能的互联网公司中依然有那么多的服务器在传统的阻塞IO模型下工作?

  5. 什么是协程?为什么Go语言这么受欢迎?

  在这篇博客中,将介绍不同层面、不同I/O模型的原理,并尝试着给出我对上述问题的回答。如果你也或多或少的对上述问题感到疑惑,希望这篇博客能为你提供帮助。

  I/O模型和硬件、操作系统内核息息相关,博客中会涉及到诸如保护模式、中断、特权级、进程/线程、上下文切换、系统调用等关于操作系统、硬件相关的概念。由于计算机中的知识是按照层次组织起来的,如果对这些相对底层的概念不是很了解的话可能会影响对整体内容的理解。可以参考一下我关于操作系统、硬件学习相关的博客:x86汇编学习、操作系统学习(持续更新中)。

二、硬件I/O模型

  软件的功能总是构建在硬件上的,计算机中的I/O本质上是CPU/内存与外设(网卡、磁盘等)进行数据的单向或双向传输。

  从外设读入数据到CPU/内存称作Input输入,从CPU/内存中写出数据到外设称作Output输出。

  要想理解软件层次上的不同I/O模型,必须先对其基于的硬件I/O模型有一个基本的认识。硬件I/O模型大致可以分为三种:程序控制I/O、中断驱动I/O、使用DMA的I/O。

程序控制I/O:

  程序控制I/O模型中,通过指令控制CPU不断的轮询外设是否就绪,当硬件就绪时一点一点的反复读/写数据。

  从CPU的角度来说,程序控制I/O模型是同步、阻塞的(同步指的是I/O操作依然是处于程序指令控制,由CPU主导的;阻塞指的是在发起I/O后CPU必须持续轮询完成状态,无法执行别的指令)。

程序控制I/O的优点:

  硬件结构简单,编写对应程序也简单。

程序控制I/O的缺点:

  十分消耗CPU,持续的轮训令宝贵的CPU资源无谓的浪费在了等待I/O完成的过程中,导致CPU利用率不高。

标签:

很赞哦! ()

本栏推荐