java IO 模型--快速分清 同步|阻塞】的更多相关文章

IO 介绍 IO 模型 IO请求 分为两个阶段:等待资源 和 使用资源: IO请求:一般需要请求特殊资源(如 磁盘.RAM 或文件),当资源被上一个使用者使用没有释放的时候, IO请求会被阻塞,直到资源可用. 等待资源 阶段有两种策略: 阻塞:当IO请求资源没有准备好的时候,请求阻塞,直到得到资源的响应(有资源 或者 超时异常): 非阻塞:资源不可用时,IO请求直接返回,返回数据不可用标志. 使用资源 阶段,IO 分为 同步IO 和 异步IO 同步IO:应用阻塞在发送数据和接受数据阶段,直到数据…
Java IO模型:BIO.NIO.AIO 本来是打算直接学习网络框架Netty的,但是先补充了一下自己对Java 几种IO模型的学习和理解.分别是 BIO.NIO.AIO三种IO模型. IO模型的基本说明 BIO模型图 缺点: 如果有很多个Client,则会产生很多个线程.压力主要是在服务器端.客户端的压力并不大. 另外建立连接之后,并不是在时时刻刻的使用.会有空间时间. 会阻塞. NIO模型图 特点: 事件驱动 多路复用 Netty底层使用的NIO模型 AIO模型 目前还未得到广泛运用.异步…
java io 模型重点讲述 bio(阻塞) 同步IO 接受请求与处理请求用同一条线程 aio 应用程序线程会向系统注册一个socket请求,以及一个回调方法,继续执行下去.socket接受区的数据监控交给系统,当数据到达接收区,系统就将接收区的数据读到应用程序的缓冲区中,再回调用注册的方法去读取数据. nio (异步非阻塞) 与aio类似,不同之此在于,aio回调完成事件时,数据已经复制到应该用程序中了(jvm),而noi还需要通过API去系统的接收区中读.接收缓冲区的选用很重要. 缓冲区类型…
  阻塞:用户进程访问数据时,如果未完成IO,等待IO操作完成或者进行系统调用来判断IO是否完成非阻塞:用户进程访问数据时,会马上返回一个状态值,无论是否完成 同步:用户进程发起IO(就绪判断)后,轮询内核状态异步:用户进程发起IO后,可以做其他事情,等待内核通知 介绍一下IO模型 网络IO模型和文件IO模型是一样的,上图是IO的5种模型,包括阻塞IO.非阻塞IO.多路复用IO.信号驱动的IO.异步IO. 一次IO包括两个过程,内核数据准备 .把数据从内核空间copy到用户空间. 1.阻塞IO(…
最近工作接触到了网络服务同步和异步,所以学习了下<UNIX网络编程>,在此作下总结. 一.I/O模型 输入/输出(I/O)是在主存和外部设备(如磁盘驱动器.终端和网络)之间拷贝数据的过程.输入是从I/O设备拷贝数据到主存,而输出是从主存拷贝数据到I/O设备.比如,网络可视为一个I/O设备,作为数据源和数据接收方.系统可以经过网络读取其他机器发送来的数据,并将数据复制到自己主存中. 下面分别介绍Unix的5种I/O模型: 阻塞式IO 非阻塞IO IO复用 信号驱动IO 异步IO 一个输入操作通常…
Linux的内核将所有外部设备都看做一个文件来操作,对一个文件的读写操作会调用内核提供的系统命令,返回一个file descriptor(fd,文件描述符).而对一个Socket的读写也会有相应的描述符,称为Socketfd(Socket描述符),描述符就是一个数字,它指向内核中的一个结构体(结构体,C/C++数据类型,类似Java中的类,存储各种不同类型的数据,这里存储的是文件路径.数据区等一些属性). 根据UNIX网络编程对I/O模型的分类,UNIX提供了5种I/O模型,分别为: 1.阻塞I…
一.同步和异步 同步:一个事件或者任务的执行,会使整个流程暂时等待,也就是说如果有多个任务要执行,必须要逐个进行. 异步:一个事件或者任务的执行,不会使整个流程暂时等待,也就是说如果有多个任务要执行,可以并发去执行. 同步和异步的关键在于一个事件或者任务的执行是否会导致整个流程暂时等待.也就是任务是逐个完成的吗 二.阻塞和非阻塞 阻塞:在某个事件或者任务执行的过程中,它发出了一个请求,但是由于该操作能够执行所需要的条件还没有达到,就会一直等待在那里,直到条件满足. 非阻塞:在某个事件或者任务执行…
在上篇<Java IO(2)阻塞式输入输出(BIO)>的末尾谈到了什么是阻塞式输入输出,通过Socket编程对其有了大致了解.现在再重新回顾梳理一下,对于只有一个“客户端”和一个“服务器端”来讲,服务器端需要阻塞式接收客户端的请求,这里的阻塞式表示服务器端的应用代码会被挂起直到客户端有请求过来,在高并发的应用场景有多个客户端发起连接下非阻塞式IO(NIO)是不二之选(且只需要在服务器端使用1个线程来管理,并不需要多个线程来处理多个连接).在现实情况下,Tomcat.Jetty等很多Web服务器…
阻塞IO(blocking IO) 在linux中,默认情况下所有的socket都是blocking,一个典型的读操作流程大概是这样: 当用户进程调用了recvfrom这个系统调用,kernel就开始了IO的第一个阶段:准备数据.对于network io来说,很多时候数据在一开始还没有到达(比如,还没有收到一个完整的UDP包),这个时候kernel就要等待足够的数据到来. 而在用户进程这边,整个进程会被阻塞.当kernel一直等到数据准备好了,它就会将数据从kernel中拷贝到用户内存, 然后k…
什么是同步和异步? 烧水,我们都是通过热水壶来烧水的.在很久之前,科技还没有这么发达的时候,如果我们要烧水,需要把水壶放到火炉上,我们通过观察水壶内的水的沸腾程度来判断水有没有烧开.随着科技的发展,现在市面上的水壶都有了提醒功能,当我们把水壶插电之后,水壶水烧开之后会通过声音提醒我们水开了.对于烧水这件事儿来说,传统水壶的烧水就是同步的,高科技水壶的烧水就是异步的. 同步请求,A调用B,B的处理是同步的,在处理完之前他不会通知A,只有处理完之后才会明确的通知A. 异步请求,A调用B,B的处理是异…