谈谈对不同I/O模型的理解 (阻塞/非阻塞IO,同步/异步IO)

Java34

一、关于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模型

输入验证码查看隐藏内容

扫描二维码关注本站微信公众号 Johngo学长
或者在微信里搜索 Johngo学长
回复 svip 获取验证码
wechat Johngo学长

相关文章
Java

操作线程的方法

操作线程的方法操作线程有很多方法,这些方法可以使线程从某一种状态过渡到另一种状态。 线程的休眠能控制线程行为的方法之一是调用sleep()方法,sleep()方法可以指定线程休眠的时间,线程休眠的时间...
Java

MySQL 锁常见知识点&面试题总结

节选自 《MySQL 常见知识点&面试题总结》 表级锁和行级锁了解吗?有什么区别? MyISAM 仅仅支持表级锁(table-level locking),一锁就锁整张表,这在并发写的情况下性...
Java

rabbitmq 安装

rabbitmq 安装 官网地址 https://rabbitmq.com/download.html 前言 RabbitMQ是一个开源的遵循 AMQP协议实现的基于 Erlang语言编写, 即需要先...
Java

Mac OS 常用Dos命令

MAC DOS常用命令 调出终端 command+空格打开搜索栏,搜索term打开终端 常用操作 ``` clear 清空屏幕内&...
Java

google和oracle闹掰,Java 会不会被抛弃?

眼花缭乱的编程语言 程序界的语言实在太多,但有一种语言不得不说,那就是java语言,Java语言是Android系统的主要开发语言,现在和Google的关系不是很好,但是他会被淘汰吗?下面简单地分析一...
Java

图像处理

绘制图像绘图类 不仅可以绘制几何图形, 还可以绘制图像,绘制图像需要使用 drawImage()方法 ,该方法用来将图像资源显示到绘图上下文中。drawImage()方法 语法: drawImage(...
Java

插入排序

插入排序 原理 第一步,保证([0,0])区间元素有序,因为只有一个元素,所以不需要过多考虑 第二步,保证([0,1])区间元素有序,如果第二个元素与前一个元素逆序,则交换位置 第三步,保证([0,2...
Java

Ideal连接SQLSERVER错误

错误1:[08S01] 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:"PKIX path building failed: sun.security.p...