同步/异步、阻塞/非阻塞概念

同步异步

同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)

同步:在发出一个调用时,在没有得到结果之前,该调用就不返回。一旦调用返回,就得到返回值了。调用者主动等待这个调用的结果。
异步:调用在发出之后就直接返回了,没有立刻得到返回结果。在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用。

I/O

通常来说,IO操作包括:对硬盘的读写、对socket的读写以及外设的读写,并且需要进行用户空间和内核空
间的区分(用户空间就是普通的用户进程,内核空间就是内核进程,只有内核空间才可以直接范围磁盘等物理
I/O设备)

用户空间产生一个读请求,请求再转交由内核空间执行
1. 内核检查读取的数据是否就绪
2. 如果就绪,内核将数据从内核空间复制到用户空间(内存上拷贝)

阻塞I/O与非阻塞I/O

阻塞I/O:内核在检查数据未就绪时,会一直等待,直到数据就绪
非阻塞I/O:如果数据没有就绪,则会返回一个标志信息告知用户线程当前要读的数据没有就绪

它们的区别在于I/O的第一阶段,阻塞是选择等待,非阻塞是返回一个标志信息

那么非阻塞I/O的优势在哪里呢?使用阻塞I/O处理网络连接时,有10000个连接就要开10000个线程,无论
有没有数据到来,处理某一连接的线程必须“忠实地阻塞”。而非阻塞I/O就不需要这样,它可以维护一个1000
个线程的线程池,当有数据就绪时,启动一个线程去接受数据,当没有数据时,线程不需要等待,直接就可以
回到池中,等待被调度到去接受其它连接。因此非阻塞I/O非常适合连接多但传输的数据内容不大的情况,
果连接少数据多,阻塞I/O更容易编程

同步I/O和异步I/O

事实上,同步IO和异步IO模型是针对用户线程和内核的交互来说的,即数据是否就绪的消息传递机制

同步IO:当用户发出IO请求操作之后,如果数据没有就绪,需要通过用户线程或者内核不断地去轮询数据是否
就绪,当数据就绪时,再将数据从内核拷贝到用户线程

异步IO:只有IO请求操作的发出是由用户线程来进行的,内核自动完成检查数据是否就绪和将数据拷贝
到用户空间的过程,然后发送通知告知用户线程IO操作已经完成。


尚学堂给同学们带来全新的Java300集课程啦!java零基础小白自学Java必备优质教程_手把手图解学习Java,让学习成为一种享受_哔哩哔哩_bilibili尚学堂给同学们带来全新的Java300集课程啦本课程为Java300集2022版第一季,配合最新版的Java课程,所有视频重新录制,课件所有图形做了重新绘制和配色,图解学习Java,让学习成为一种享受本套教程专门为零基础学员而制,适合准备入行Java开发的零基础学员,视频中穿插多个实战项目。每一个知识点都讲解的通俗易懂,由浅入深。不仅适用于零基础的初学者,有经验的程序员也可做巩固学习。后续课https://www.bilibili.com/video/BV1qL411u7eE?spm_id_from=333.999.0.0

零基础java自学流程-Java语言高级531相关推荐

  1. 零基础java自学流程-Java语言高级534

    BIO BIO(Blocking I/O),同步阻塞,实现模式为一个连接一个线程,即当有客户端连接时,服务器端需为其单独分配一个线程,如果该连接不做任何操作就会造成不必要的线程开销.BIO是传统的Ja ...

  2. 零基础java自学流程-Java语言高级577

    HTTP Request header 使用Fiddler 能很方便的查看Reques header, 点击Inspectors tab ->Request tab-> headers  ...

  3. 零基础java自学流程-Java语言高级369

    //存放矩阵每行的查找结果 public class Result {private int data[];public Result(int size) {data=new int[size];}p ...

  4. 零基础java自学流程-Java语言高级432

    (4)TIDYING 当执行shutdown()或shutdownNow()之后,如果所有任务已中止,且工作线程数量为0,就会进入这个状态. final void tryTerminate() {fo ...

  5. 零基础java自学流程-Java语言高级269

    yeild 一个调用yield方法的线程,是要告诉虚拟机它乐意让其他线程占用自己的位置,yield将当前线程由运行状态置为就绪状态,来达到让步的目的,但是刚进入就绪状态的线程也可能马上进入运行状态. ...

  6. 零基础怎么自学Java?自学Java有什么误区?

    目前在中国众多行业中,极具发展潜力的就是Java软件开发工程师.学Java的人也是越来越多.实际上在学习Java编程之前需要先学习一些编程基础.新手往往无非进行系统的学习,主要原因是自己搜集信息较为零 ...

  7. 零基础,自学JAVA编程需要多长时间才能学完?

    现在不少朋友在问:零基础学Java需要花多少时间?在你开始学一门技术之前,你也得进行各个方面的考察,特别是时间方面你得仔细的思考,因为时间短,这是人之喜见的,要是时间长,那么你就会产生焦虑.不安.自我 ...

  8. Java零基础好学吗?Java该怎么学?

    Java零基础好学吗?Java该怎么学?在IT行业中,Java开发工程师是一个很吃香的职业,薪资水平也是几乎过万,许多人想转行Java开发,但又担心零基础能不能学会,学起来有多难,如果是零基础自学Ja ...

  9. 零基础小白如何学会Java?

    Java作为目前使用最广泛的编程语言,自身在常见的企业级业务应用程序以及Android应用程序等方面都有突出的表现.作为跨平台语言,具有安全性.易用性.通用性等特点,被特意设计用于互联网的分布式环境. ...

  10. 零基础适合学python吗-零基础更适合学习Java还是python?

    原标题:零基础更适合学习Java还是python? 最近有小伙伴向云和数据小编咨询,说想学习一门编程语言,但是没有任何基础,问是学习Java好还是学python更合适?对于这位小伙伴的问题,小编觉得有 ...

最新文章

  1. R构建Kmeans聚类模型
  2. 机器学习:分类,回归,聚类
  3. 光盘压制:八种加密方法保护光盘数据安全
  4. 团队作业——随堂小测
  5. Xposed源码剖析——hook具体实现
  6. Java+MyEclipse+Tomcat (五)DAO和Java Bean实现数据库和界面分开操作
  7. MVC中跳转到其他页面,并传参数
  8. 西工大java实验报告给,西工大数字集成电路实验 实验课6 加法器的设计
  9. 数据库的事务,隔离级别和3大范式
  10. MySQL笔记-删除session,删除阻塞任务
  11. github不支持html,为什么Github页面不允许我有效的HTML?
  12. 视频编解码(十二):播放器编解码流程source、demux、decoder、output
  13. Redis学习笔记——简介及配置
  14. IT运维岗位可以分为哪几种?10个运维岗详解
  15. html播放优酷链接视频教程,视频教程链接(请将网址复制粘贴到浏览器地址栏查看):...
  16. Selenium和Firefox对应版本
  17. symbian 串行通信
  18. VMware 的安装和破解密码
  19. 题目 1549: 盾神与积木游戏
  20. ssm根据pdf模板导出pdf

热门文章

  1. JAVA实现简易文本编辑器设计
  2. 基于Vue+nodejs+Web的网上书城系统
  3. 认识影片版本(CAM、TS、TC、DVD、HD、BD、TVRIP等)
  4. 程序设计语言与语言程序处理程序基础(软件设计师备考笔记)
  5. centos7字体颜色改变_CentOS7.3中设置Shell终端文本外观自定义字体
  6. 美团技术十年:让我们感动的那些人那些事
  7. iphone转android通讯录,苹果IPHONE通讯录电话簿转到安卓手机csv,vcf方法(ITUNES,OUTLOOK,EXCEL)...
  8. C++时间类型详解( time_t 和 tm )
  9. 这一晚注定属于C罗!回归首秀梅开二度,现场超过7万球迷见证这场胜利
  10. 360se html怎么删除,如何卸载360浏览器?怎么彻底删除360浏览器?