zoukankan      html  css  js  c++  java
  • 同步和异步、阻塞和非阻塞

    一、什么是同步和异步

    同步和异步是针对应用程序和内核的交互而言的,同步指的是用户进程或线程触发IO操作并等待或者轮询的去查看IO操作是否就绪,而异步是指用户进程出发IO操作以后便开始做自己的事情,而当IO操作已经完成的时候会得到IO完成通知。

    以银行取款为例:
    同步 : 自己亲自出马持银行卡到银行取钱(使用同步 IO 时,Java 自己处理 IO 读写);
    异步 : 委托一小弟拿银行卡到银行取钱,然后给你(使用异步 IO 时,Java 将 IO 读写委托给 OS 处理,需要将数据缓冲区地址和大小传给 OS(银行卡和密码),OS 需要支持异步 IO操作 API);

    二、什么是阻塞和非阻塞

    阻塞和非阻塞是针对于进程在访问数据的时候,根据IO操作的就绪状态来采取的不同的方式,说白了就是一种读取或者写入操作方法的实现方式,阻塞方式下读取或者写入方法将一直等待,而非阻塞方式下,读取或者写入方法会立即返回一个状态值。

    以银行取款为例:
    阻塞 : ATM 排队取款,你只能等待(使用阻塞 IO 时,Java 调用会一直阻塞到读写完成才返回);
    非阻塞 : 柜台取款,取个号,然后坐在椅子上做其它事,等号广播会通知你办理,没到号你就不能去,你可以不断问大堂经理排到了没有,大堂经理如果说还没到你就不能去(使用非阻塞 IO 时,如果不能读写 Java 调用会马上返回,当 IO 事件分发器通知可读写时再继续进行读写,不断循环直到读写完成)

  • 相关阅读:
    IDEA中写xml配置文件的时候没有代码提示
    Spring事务中的readonly
    解决IDEA项目名称无下标蓝色小方块
    【24小时内第四更】为什么我们要坚持写博客?
    .Net架构篇:实用中小型公司支付中心设计
    .NetCore外国一些高质量博客分享
    .Net业务搭配实用技术栈
    .NetCore实践爬虫系统(一)解析网页内容
    APM实践目录
    docker环境部署
  • 原文地址:https://www.cnblogs.com/girl1314/p/11064561.html
Copyright © 2011-2022 走看看