• 阻塞、非阻塞和同步、异步的区别


    同步场景中阻塞和非阻塞

    我们是用传统的水壶烧水。在水烧开之前我们一直做在水壶前面,等着水开。这就是阻塞的。

    我们是用传统的水壶烧水。在水烧开之前我们先去客厅看电视了,但是水壶不会主动通知我们,需要我们时不时的去厨房看一下水有没有烧开。这就是非阻塞的。

    异步场景中阻塞和非阻塞

    我们是用带有提醒功能的水壶烧水。在水烧发出提醒之前我们一直做在水壶前面,等着水开。这就是阻塞的。

    我们是用带有提醒功能的水壶烧水。在水烧发出提醒之前我们先去客厅看电视了,等水壶发出声音提醒我们。这就是非阻塞的。

    Java中的三种IO模型

    在Java语言中,一共提供了三种IO模型,分别是阻塞IO(BIO)、非阻塞IO(NIO)、异步IO(AIO)。

    BIO (Blocking I/O):同步阻塞I/O模式,数据的读取写入必须阻塞在一个线程内等待其完成。

    NIO (New I/O):同时支持阻塞与非阻塞模式,但主要是使用同步非阻塞IO。

    AIO (Asynchronous I/O):异步非阻塞I/O模型。

    白话文:

    BIO (Blocking I/O):有一排水壶在烧开水,BIO的工作模式就是,叫一个线程停留在一个水壶那,直到这个水壶烧开,才去处理下一个水壶。但是实际上线程在等待水壶烧开的时间段什么都没有做。

    NIO (New I/O):NIO的做法是叫一个线程不断的轮询每个水壶的状态,看看是否有水壶的状态发生了改变,从而进行下一步的操作。

    AIO ( Asynchronous I/O):为每个水壶上面装了一个开关,水烧开之后,水壶会自动通知我水烧开了。

  • 相关阅读:
    缓存限定登录次数
    IntelliJ IDEA使用心得之基础篇
    HibernateTemplate#setMaxResults()的坑
    getHibernateTemplate() VS getSession()
    地区和语言的国际标准码
    CentOS6.5安装MySql5.5
    使用wkhtmltopdf实现HTML转PDF的解决方案
    Bootstrap分页插件:bootstrap-paginator
    Maven无法引入自定义构件依赖的解决方案
    Java与数据库类型对照表
  • 原文地址:https://www.cnblogs.com/manastudent/p/12264401.html
Copyright © 2020-2023  润新知