I/O模型 - 同步/异步/阻塞/非阻塞

前几天找时间重温了下计算机中一些常用但很容易让人搞混的知识点:同步/异步 ,阻塞/非阻塞。

什么是同步?什么是阻塞?这些名词到底起源于哪里?

没有无源之水,一切计算机方案都是解决实际问题的,同步、阻塞起源于I/O模型,而I/O模型解决了什么问题?

I/O模型解决的是计算机CPU(中央处理器)与外设(网卡、磁盘、键盘、鼠标)的速度不匹配的问题。

I/O模型 - 同步/异步/阻塞/非阻塞_第1张图片

所以为了解决CPU与外设的速度不匹配问题,造就了I/O模型,而I/O模型衍生出了下面的几种常用的I/O模型术语:

  • 同步阻塞I/O
  • 同步非阻塞I/O
  • I/O多路复用(是同步非阻塞的变形与优化)
  • 信号驱动I/O
  • 异步I/O

由于CPU与外设运行速度的不匹配,CPU运行的快,而外设运行的慢。

假设从网卡中获取网络数据,就需要先将数据读取到内存中,然后CPU去处理内存中的数据。现在运行的一个任务如下图所示:启动一个监听程序服务(Server),监听机器上指定端口,然后不断从端口中解析数据,然后会不时地有很多Client来连接这个服务,向服务发送一些指令操作,当监听服务监听到不同Client发起的不同指令后,就会执行不同的任务,这其实就是一个典型的Server/Client的socket程序。

你可能感兴趣的:(java并发模型,阻塞,异步,java)