您好、欢迎来到现金彩票网!
当前位置:手机棋牌游戏平台 > 伪语义树 >

同步异步阻塞非阻塞BIONIOA

发布时间:2019-07-10 05:37 来源:未知 编辑:admin

  所谓同步,指的是协同步调。既然叫协同,所以至少要有2个以上的事物存在。协同的结果就是:

  多个事物不能同时进行,必须一个一个的来,上一个事物结束后,下一个事物才开始。

  严格来讲这个并没有要求,但一般都是处于一种“等待”的状态,因为通常后面事物的正常进行都需要依赖前面事物的结果或前面事物正在使用的资源。

  因此,可以认为,同步更希望关注的是从宏观整体来看,多个事物是一种逐个逐个的串行化关系,绝对不会出现交叉的情况。

  把这个理论应用的出神入化的非“排队”莫属。凡是在资源少需求多的场景下都会用到排队。

  其实售票大厅更在意的是旅客一个一个的到窗口去买票,因为一次只能卖一张票。

  即使大家一窝蜂的都围上去,还是一次只能卖一张票,何必呢?挤在一起又不安全。

  只是有些人素质太差,非要往上挤,售票大厅迫不得已,采用排队这种形式来达到自己的目的,即一个一个的买票。

  除了这种由于资源导致的同步外,还存在一种由于逻辑上的先后顺序导致的同步。

  比如,先更新代码,然后再编译,接着再打包。这些操作由于后一步要使用上一步的结果,所以只能按照这种顺序一个一个的执行。

  一是范围,并不需要在全局范围内都去同步,只需要在某些关键的点执行同步即可。

  比如食堂只有一个卖饭窗口,肯定是同步的,一个人买完,下一个人再买。但吃饭的时候也是一个人吃完,下一个人才开始吃吗?当然不是啦。

  只不过小粒度的事物同步通常是天然支持的,而大粒度的事物同步往往需要手工处理。

  比如两个线程的同步就需要手工处理,但一个线程里的两个语句天然就是同步的。

  多个事物可以你进行你的、我进行我的,谁都不用管谁,所有的事物都在同时进行中。

  一言以蔽之,同步就是多个事物不能同时开工,异步就是多个事物可以同时开工。

  注:一定要去体会“多个事物”,多个线程是多个事物,多个方法是多个事物,多个语句是多个事物,多个CPU指令是多个事物。等等等等。

  所谓阻塞,指的是阻碍堵塞。它的本意可以理解为由于遇到了障碍而造成的动弹不得。

  所谓非阻塞,自然是和阻塞相对,可以理解为由于没有遇到障碍而继续畅通无阻。

  汽车可以正常通行时,就是非阻塞。一旦堵上了,全部趴窝,一动不动,就是阻塞。

  等待只是阻塞的一个副作用而已,表明随着时间的流逝,没有任何有意义的事物发生或进行。

  阻塞的真正含义是你关心的事物由于某些原因无法继续进行,因此让你等待。但没必要干等,你可以做一些其它无关的事物,因为这并不影响你对相关事物的等待。

  在堵车时,你可以干等。也可以玩手机、和别人聊天,或者打牌、甚至先去吃饭都行。因为这些事物并不影响你对堵车的等待。不过你的车必须呆在原地。

  在计算机里,是没有人这么灵活的,一般在阻塞时,选在干等,因为这最容易实现,只需要挂起线程,让出CPU即可。在条件满足时,会重新调度该线程。

  同步阻塞,不能同时开工,也不能动。只有一条小道,一次只能过一辆车,可悲的是还TMD的堵上了。

  同步非阻塞,不能同时开工,但可以动。只有一条小道,一次只能过一辆车,幸运的是可以正常通行。

  异步阻塞,可以同时开工,但不可以动。有多条路,每条路都可以跑车,可气的是全都TMD的堵上了。

  异步非阻塞,可以工时开工,也可以动。有多条路,每条路都可以跑车,很爽的是全都可以正常通行。

  是不是很容易理解啊。其实它们的关注点是不同的,只要搞明白了这点,组合起来也不是事儿。

  IO指的就是读入/写出数据的过程,和等待读入/写出数据的过程。一旦拿到数据后就变成了数据操作了,就不是IO了。

  拿网络IO来说,等待的过程就是数据从网络到网卡再到内核空间。读写的过程就是内核空间和用户空间的相互拷贝。

  所以IO就包括两个过程,一个是等待数据的过程,一个是读写(拷贝)数据的过程。而且还要明白,一定不能包括操作数据的过程。

  应用程序都是运行在用户空间的,所以它们能操作的数据也都在用户空间。按照这样子来理解,只要数据没有到达用户空间,用户线程就操作不了。

  如果此时用户线程已经参与,那它一定会被阻塞在IO上。这就是常说的阻塞IO。用户线程被阻塞在等待数据上或拷贝数据上。

  非阻塞IO就是用户线程不参与以上两个过程,即数据已经拷贝到用户空间后,才去通知用户线程,一上来就可以直接操作数据了。

  按照上文中对同步的理解,同步IO是指发起IO请求后,必须拿到IO的数据才可以继续执行。

  在等待数据的过程中,和拷贝数据的过程中,线程都在阻塞,这就是同步阻塞IO。

  在等待数据的过程中,线程采用死循环式轮询,在拷贝数据的过程中,线程在阻塞,这其实还是同步阻塞IO。

  网上很多文章把第二种归为同步非阻塞IO,这肯定是错误的,它一定是阻塞IO,因为拷贝数据的过程,线程是阻塞的。

  严格来讲,在IO的概念上,同步和非阻塞是不可能搭配的,因为它们是一对相悖的概念。

  同步IO意味着必须拿到IO的数据,才可以继续执行。因为后续操作依赖IO数据,所以它必须是阻塞的。

  非阻塞IO意味着发起IO请求后,可以继续往下执行。说明后续执行不依赖于IO数据,所以它肯定不是同步的。

  因此,在IO上,同步和非阻塞是互斥的,所以不存在同步非阻塞IO。但同步非阻塞是存在的,那不叫IO,叫操作数据了。

  按照上文中对异步的理解,异步IO是指发起IO请求后,不用拿到IO的数据就可以继续执行。

  用户线程的继续执行,和操作系统准备IO数据的过程是同时进行的,因此才叫做异步IO。

  在等待数据的过程中,用户线程继续执行,在拷贝数据的过程中,线程在阻塞,这就是异步阻塞IO。

  在等待数据的过程中,和拷贝数据的过程中,用户线程都在继续执行,这就是异步非阻塞IO。

  第一种情况是,用户线程没有参与数据等待的过程,所以它是异步的。但用户线程参与了数据拷贝的过程,所以它又是阻塞的。合起来就是异步阻塞IO。

  第二种情况是,用户线程既没有参与等待过程也没有参与拷贝过程,所以它是异步的。当它接到通知时,数据已经准备好了,它没有因为IO数据而阻塞过,所以它又是非阻塞的。合起来就是异步非阻塞IO。

  学习书籍:Netty权威指南多种IO方式的比较:1、BIO(同步阻塞IO)使用ServerSocket绑定IP地址和监听端口,客户端发起连接,通过三次握手建立连接,用socket来进行通信,通过输入输...博文来自:初生牛犊

  写在开头:本文不是纯讲技术,会涉及概念理解和语义分析的要点。正如博主标题说的,高效的学习方法比拥有多少知识重要。高效的学习方法途径之一就是阅读理解,理解能力越好,掌握越快,知识体系更清晰。如果刚入门N...博文来自:一学就明的博客

  学习书籍:Netty权威指南多种IO方式的比较:1、BIO(同步阻塞IO)使用ServerSocket绑定IP地址和监听端口,客户端发起连接,通过三次握手建立连接,用socket来进行通信,通过输入输...博文来自:kdy527的专栏

  在我们了解JavaNIO/BIO的网络通信之前,我们先了解一下常用的阻塞/非阻塞模型以及同步/异步的概念一、阻塞和非阻塞从简单的开始,我们以经典的读取文件的模型举例。(对操作系统而言,所有的输入输出设...博文来自:Master-TJ的个人博客

  在JavaNIO(一)从操作系统角度对比IO与NIO的对比中已经介绍了传统IO(也叫BIO,基本IO的意思),下面主要介绍NIO关于网络编程的部分。网络编程的基本模型都是Server/Client模型...博文来自:xyh的博客

  BIO(阻塞IO)一个线程负责连接,一请求一应答,缺乏弹性伸缩能力。 伪异步IO通信(BIO优化版本)线程池负责连接,M请求N应答,线程池阻塞。伪异步IO是BIO的一个优化方案。创建N个线程的线程池对...博文来自:Java_Mrsun的博客

  很多刚接触NIO的人,第一眼看到的就是Java相对晦涩的API,比如:Channel,Selector,Socket什么的;然后就是一坨上百行的代码来演示NIO的服务端Demo,所以这里我们人性化地简...博文来自:一个博客

  同步异步阻塞非阻塞:废话不说,老张爱喝茶,煮开水,有两个水壶,普通水壶,响水壶(水开会提示)(引自)同步就是普通水壶烧开水,要没事儿自己过来来看开没开;异步就是响水壶烧开水,水开了水壶响了通知你。阻塞...博文来自:贺爷演示技术流

  由于之前看的容易忘记,因此特记录下来,以便学习总结与更好理解,该系列博文也是第一次记录,所有有好多不完善之处请见谅与留言指出,如果有幸大家看到该博文,希望报以参考目的看浏览,如有错误之处,谢谢大家指出...博文来自:平凡之路无尽路的博客

  NIO同步阻塞与同步非阻塞BIO与NIOIO为同步阻塞形式,NIO为同步非阻塞形式,NIO并没有实现异步,在JDK1.7后升级NIO库包,支持异步非阻塞同学模型NIO2.0(AIO)BIO(同步阻塞式...博文来自:yswKnight的博客

  1.概念同步和异步的概念:实际的I/O操作同步是用户线程发起I/O请求后需要等待或者轮询内核I/O操作完成后才能继续执行异步是用户线程发起I/O请求后仍需要继续执行,当内核I/O操作完成后会通知用户线...博文来自:u011385186的专栏

  在openssl中使用非阻塞的bio方法纪要。通过与epoll的配合,完成高效的加密连接处理...博文来自:掠雪墨影的随记

  javanio的io模型是同步非阻塞,这里的同步异步指的是真正io操作(数据内核态用户态的拷贝)是否需要进程参与。而说javanio提供了异步处理,这个异步应该是指编程模型上的异步。基于reactor...博文来自:一念永恒

  异步非阻塞AIO编程,在NIO基础之上引入了异步通道的概念,并提供了异步文件和异步套接字的实现,从而在真正意义上实现了异步非阻塞,之前我们学习的NIO只是非阻塞而并非异步。而AIO它不需要通过多路复用...博文来自:天空鸟的博客

  一、网络编程基础原理1网络编程(Socket)概念首先注意,Socket不是Java中独有的概念,而是一个语言无关标准。任何可以实现网络编程的编程语言都有Socket。1.1什么是Socket网络上的...博文来自:志想汇

  网络应用需要处理的无非就是两大类问题,网络I/O,数据计算。相对于后者,网络I/O的延迟,给应用带来的性能瓶颈大于后者。 概念概念1:阻塞与非阻塞 概念2:同步与异步 概念3:(网络)I/O模型,好像...博文来自:专注交流

  同步异步是从当前时刻角度看的,阻塞非阻塞是对事件的执行过程来看的。同步是指一个时刻仅有一件事件在执行。异步指一个时刻可以有多个事件同时执行。阻塞指事件执行必须连续,一个事件从开始到结束不能有其他的事件...博文来自:山鬼谣弋痕夕的博客

  同步和异步同步就是你知道你什么时候在做什么,做完一件事情再做下一件事情,因此主动权在自己手里。比如通过等待或轮询,你在某个时间点总是知道结果是怎样的(有数据还是没数据等)。异步就是你不知道什么时候会发...博文来自:落尘纷扰的专栏

  了解一下,Tomcat支持三种接收请求的处理方式:BIO、NIO、APR。1:Bio方式,阻塞式I/O操作即使用的是传统Java I/O操作,Tomcat7以下版本默认情况下是以bio模式运行的,由于...博文来自:参与感

  1.在了解bio和nio之前,我们需要知道同步异步和阻塞非阻塞的区别-异步/同步: -异步:你去书店,问最新一期的漫画《柯南》到货没,老板说,没到货,到货了给你打电话。你就走了,而且在没接到老板电话之...博文来自:zzzgd_666的博客

  BIO,NIO,多路复用,AIO概念理解IO流程三大IO模型的解释总结BIO,NIO,多路复用,AIO概念理解同步和异步关注点在于处理机制,同步在于等待上一条语句调用后的返回结果才继续,异步在于事件响...博文来自:Aaron_涛

  一、简介jdk1.7起,推出了nio2.0,引入了异步通道,即异步非阻塞AIO。这里对AIO进行介绍。二、关键类及其方法1、letionHandler可进行...博文来自:panda-star的博客

  Java中的IO部分比较复杂,具体可参看书籍《JavaNIO》和《Netty权威指南》。在此,仅对BIO、NIO和AIO进行概述性梳理,未涉及到具体实现细节,后续有空将深入展开。同步IO和异步IO参考...博文来自:Java名企面试吧

  在网络编程中,接触到最多的就是利用Socket进行网络通信开发。在Java中主要是以下三种实现方式BIO、NIO、AIO。关于这三个概念的辨析以前一直都是好像懂,但是表达的不是很清楚,下面做个总结完全...博文来自:努力奔跑中的coder

  看来很多关于bionioaio博客,每次都是看不太懂,终于有点头绪,写博客记录下备用。在了解bionioaio之前,首先这三个都是针对系统io来说的(包括网络io、磁盘io、内存io),先要知道程序读...博文来自:a407479的专栏

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

  NIO学习笔记简介随着JavaIO类库的不断发展和改进,基于Java的网络编程会变得越来越简单。随着异步IO功能的增强,基于JavaNIO开发的网络服务器甚至不逊色与C++开发的网络程序。记录一下学习...博文来自:陈钊的博客

  IO(BIO),NIO,AIO的深度解析和区别  IO  概念:Socket又称“套接字”,应用程序通常通过“套接字”向网络发出请求或者应答网络请求。 Socket和ServerSocket类库位于j...博文来自:小马哥的博客

  BIO(blockingio)和NIO(non-blockingio)从同(异)步和阻塞两个维度来区分同步和异步针对的是,关心的是事件通知的方式。比如,你关注某个明星,想知道他最近的行程。同步:你自己...博文来自:kfyong的专栏

  同步与异步   同步与异步是针对应用程序与内核的交互而言的。同步过程中进程触发IO操作并等待或者轮询的去查看IO操作是否完成。异步过程中进程触发IO操作以后,直接返回,做自己的事,IO交给内核来...博文来自:suchahaerkang的博客

  最近一直在准备面试,为了使自己的Java水平更上一个档次,拜读了李林峰老师的《Netty权威指南》,了解了Java关于IO的发展和最新的技术,真是受益匪浅,现在把我总结的关于BIO、NIO和AIO的区...博文来自:我的编程世界

  2017年春季开源中国要说最火的开源项目,即时通信框架敢说第一,没人敢说第二,当然现在是3月10日,它还能否火热一年让我们拭目以待。  虽然我不是talent-aio的作者,但也是挂名的开发者,所以好...博文来自:码农的世界你不懂

  本文会从传统的BIO到NIO再到AIO自浅至深介绍,并附上完整的代码讲解。1、BIO编程1.1、传统的BIO编程网络编程的基本模型是C/S模型,即两个进程间的通信。服务端提供IP和监听端口,客户端通过...博文来自:anxpp的博客

  引入网络编程的基本模型是C/S模型,即两个进程间的通信。当我们使用socket套接字进行网络通信开发时,有那些实现方式呢,下面介绍的就是我们会用到的三种方式:同步阻塞的BIO、同步非阻塞的NIO、异步...博文来自:happy的博客

  1.为什么使用netty简单,再也不用编写复杂的代码逻辑去实现通信,再也不用考虑性能问题,不需要考虑编解码问题,半包读写问题。netty运用于Hadoop的RPC框架Avro,JMS框架RocketM...博文来自:的博客

  同步阻塞IO(BIO):用户进程发起一个IO操作以后,必须等待IO操作的真正完成后,才能继续运行;同步非阻塞IO(NIO):用户进程发起一个IO操作以后,可做其它事情,但用户进程需要经常询问IO操作是...博文来自:热爱我的热爱

  《Java之IO,BIO,NIO,AIO知多少?》主要是针对有一定基础的Java学员。本课程主要围绕着IO,BIO,NIO,AIO等基础知识展开的,同时会讲解很多具体代码实例。在本课程中,学员可以掌握...博文来自:阿毅

  1有人能说清楚JAVA7NIONETTYIOCP之间的联系吗?原文链接:不过这似乎是3年前的问题?还没有找到答案吗?那我说...博文来自:ice-wee的专栏

  传统IO传统IO的数据拷贝流程如下图:数据需要从磁盘拷贝到内核空间,再从内核空间拷到用户空间(JVM)。程序可能进行数据修改等操作再将数据拷贝到内核空间,内核空间再拷贝到网卡内存,通过网络发送出去(或...博文来自:localhost01

  疯狂创客圈Java分布式聊天室【亿级流量】实战系列之-21【博客园总入口】文章目录写在前面1.1.Java**IO读写原理**1.1.1.内核缓冲与进程缓冲区1.1.2.javaIO读写的底层流程1....博文来自:crazymakercircle的博客

  BIO、NIO以及AIO特点及比较BIO传统阻塞式IO的瓶颈在于每个连接都要创建线程,当连接过多时不能处理大量连接。讨论为什么传统IO会阻塞?首先说明一下socketsocket是支持TCP/IP网络...博文来自:wthfeng的专栏

  由于FastDFS集群搭建非常复杂,对于初期学习FastDFS来说,搭建个单机版的作为入门更为实际一些。n第一步:搭建虚拟环境n        FastDFS需要在Linux系统上安装,我们一般使用的...博文来自:u012453843的专栏

  jquery/js实现一个网页同时调用多个倒计时(最新的)nn最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦!nnnn//jsn...博文来自:Websites

  局部异常因子算法-Local Outlier Factor(LOF)在数据挖掘方面,经常需要在做特征工程和模型训练之前对数据进行清洗,剔除无效数据和异常数据。异常检测也是数据挖掘的一个方向,用于反...博文来自:wangyibo0201的博客

  1. 前言rn隐马尔科夫HMM模型是一类重要的机器学习方法,其主要用于序列数据的分析,广泛应用于语音识别、文本翻译、序列预测、中文分词等多个领域。虽然近年来,由于RNN等深度学习方法的发展,HMM模型...博文来自:tostq的专栏

  扫二维码关注,获取更多技术分享nnn 本文承接之前发布的博客《 微信支付V3微信公众号支付PHP教程/thinkPHP5公众号支付》必须阅读上篇文章后才可以阅读这篇文章。由于最近一段时间工作比较忙,...博文来自:Marswill

  最近比较有空,大四出来实习几个月了,作为实习狗的我,被叫去研究Docker了,汗汗!nnDocker的三大核心概念:镜像、容器、仓库n镜像:类似虚拟机的镜像、用俗话说就是安装文件。n容器:类似一个轻量...博文来自:我走小路的博客

  webService学习(二)—— 调用自定义对象参数rn本文主要内容:rn1、如何通过idea进行webService Client的简单实现(不再使用wsimport的方式,其实是ide帮我们做了...博文来自:止水的专栏

  链表是数据结构中最基本常用的,C++语言中单链表是利用指针操作实现的,python作为面向对象编程的,可以使用创建一个Node类来实现链表,利用类的属性引用来代替指针操作。n 下面我们创建了一个...博文来自:令狐公子的博客

  前言本文是对之前的一篇文章Spring+SpringMVC+mybatis+Quartz整合代码部分做的一个修改和补充, 其中最大的变化就是后台框架变成了Spring Boot。本工程所用到的技术或工...博文来自:天降风云的博客

http://lsm-systems.com/weiyuyishu/267.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有