同步/异步,阻塞/非阻塞你真的理解了吗?

本文介绍了同步/异步、阻塞/非阻塞的概念,探讨了它们在进程切换和I/O操作中的表现,并通过实例分析了两者之间的区别。文章还提到了POSIX对异步I/O的定义,并讨论了不同操作系统和框架下的异步实现,如Linux的AIO和Windows的IOCP,以及Netty和Ajax等非标准异步模型。
摘要由CSDN通过智能技术生成

前言

  对阻塞/非阻塞和同步/异步的概念大家一定不陌生,平常多多少少都会接触,如某个异步的接口调用,一个异步的框架,但是如果真正的让你在面试时定义这个概念,可能就摸不着头脑了。

常见问题:

  1. 阻塞和非阻塞的区别?
  2. 同步和异步的区别?
  3. 非阻塞和异步一样吗?
  4. 五种I/O模式各自是什么类型?
  5. Java中的NIO/AIO是异步吗?
  6. Epoll是异步吗?

  对阻塞/非阻塞,同步/异步概念的理解绝非简单的几个买书或者约会的比喻就能解释清楚,这些比喻拿来应付外行还行,如果在面试时说,想想还是蛮尴尬的 (°ー°〃) ,

面试官: 请描述一下异步I/O系统调用。
我: 异步指定是我们现在不需要约会,而是在以后某个时间由你来通知我,然后进行约会。
面试官:。。。
在这里插入图片描述

  那么应该从什么角度来回答这些问题,才能显得自己是一个聪明能干肯钻研的好后生呢?我得出以下结论:

  • 明定义-----在什么层级上定义的概念
  • 分角度-----从什么角度来比较
  • 会延伸-----将面试往自己期待的方向引导

  接下来,看如何理解上面三点!


先修知识

  阻塞/非阻塞,异步同步的概念涉及的知识比较广,涉及如下几个需要了解的知识:

  • Linux进程
    1)进程切换
    2)进程状态
  • I/O
    1)缓存I/O
    2)网络I/O

下面只是大致介绍,但是每一点都是十分重要的内容


进程切换
在这里插入图片描述
上图,展示的是由进程P0切换到内核,再从内核切换到进程P1,最后再切换回来的流程图:
1)中断(interrupt) 或 系统调用(system call) 发生可以使得 CPU 的控制权会从当前进程转移到操作系统内核;
2)操作系统负责保存P0在CPU中的上下文(进程上下文,所有寄存器中的值,进程的状态,堆栈中的内容),保存到PCB0(进程控制块) 中;
3)从PCB1中取出进程P1的进程上下文,将CPU的控制权转移到进程P1,即可以执行P1的指令了。

注意:
  我们讨论阻塞/非阻塞,同步/异步一般针对一个特定的系统调用(system call),例如对硬盘或者网络接口的读写,现在就知道,当我们发起一次read()时,我们的进程将被切换到内核态,既然控制权不在调用read()的进程了,那势必进程的状态会发生改变。

进程状态

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值