《Java高并发核心编程. 卷1, NIO、Netty、Redis、ZooKeeper》 读书笔记
创始人
2024-05-31 18:03:41
0

第2章 高并发IO的底层原理

2.1 IO读写的基本原理

为了避免用户进程直接操作内核,保证内核安全,操作系统将内存(虚拟内存)划分为两部分:一部分是内核空间(Kernel-Space),另一部分是用户空间(User-Space)

  • 上层应用通过操作系统的read系统调用把数据从内核缓冲区复制到应用程序的进程缓冲区,通过操作系统的write系统调用把数据从应用程序的进程缓冲区复制到操作系统的内核缓冲区

  • read和write两大系统调用都不负责数据在内核缓冲区物理设备(如磁盘、网卡等)之间的交换。这个底层的读写交换操作是由操作系统内核(Kernel)来完成的。

  • 在Linux系统中,操作系统内核只有一个内核缓冲区每个用户程序(进程)都有自己独立的缓冲区,叫作用户缓冲区或者进程缓冲区

Java客户端和服务端之间完成一次socket请求和响应(包括read和write)的数据交换,其完整的流程如下:

客户端发送请求:Java客户端程序通过write系统调用将数据复制到内核缓冲区,Linux将内核缓冲区的请求数据通过客户端机器的网卡发送出去
服务端获取请求:在服务端,这份请求数据会从接收网卡中读取到服务端机器的内核缓冲区。Java服务端程序通过read系统调用从Linux内核缓冲区读取数据,再送入Java进程缓冲区
服务端业务处理:Java服务器在自己的用户空间中完成客户端的请求所对应的业务处理
服务端返回数据:Java服务器完成处理后,构建好的响应数据将从用户缓冲区写入内核缓冲区,这里用到的是write系统调用。服务端Linux系统将内核缓冲区中的数据写入网卡网卡通过底层的通信协议将数据发送给目标客户端

2.2 四种主要的IO模型

阻塞IO(Blocking IO)指的是需要内核IO操作彻底完成后才返回到用户空间执行用户程序的操作指令。
阻塞 指的是用户程序(发起IO请求的进程或者线程)的执行状态。
非阻塞IO(Non-Blocking IO,NIO)指的是用户空间的程序不需要等待内核IO操作彻底完成,可以立即返回用户空间去执行后续的指令,即发起IO请求的用户进程(或者线程)处于非阻塞状态,与此同时,内核会立即返回给用户一个IO状态值。

阻塞和非阻塞的区别是什么呢?
阻塞是指用户进程(或者线程)一直在等待,而不能做别的事情;
非阻塞是指用户进程(或者线程)获得内核返回的状态值就返回自己的空间,可以去做别的事情。在Java中,非阻塞IO的socket被设置为NONBLOCK模式

同步IO是指用户空间(进程或者线程)是主动发起IO请求的一方,系统内核是被动接收方。
异步IO(Asynchronous IO,AIO)则反过来,系统内核是主动发起IO请求的一方,用户空间是被动接收方。

1、 同步阻塞IO

指的是用户空间(或者线程)主动发起,需要等待内核IO操作彻底完成后才返回到用户空间的IO操作。
在IO操作过程中,发起IO请求的用户进程(或者线程)处于阻塞状态。
在这里插入图片描述

2、同步非阻塞IO

指的是用户进程主动发起,不需要等待内核IO操作彻底完成就能立即返回用户空间的IO操作。
在IO操作过程中,发起IO请求的用户进程(或者线程)处于非阻塞状态。
在这里插入图片描述

  • 同步非阻塞IO的特点是应用程序的线程需要不断地进行IO系统调用,轮询数据是否已经准备好,如果没有准备好就继续轮询,直到完成IO系统调用为止。这将占用大量的CPU时间,效率低下。
  • 在高并发应用场景中,同步非阻塞IO是性能很低的,也是基本不可用的。但是此模型还是有价值的,其作用在于其他IO模型中可以使用非阻塞IO模型作为基础,以实现其高性能。

2、IO多路复用

一个用户进程(或者线程)可以监视多个文件描述符,一旦某个描述符就绪(一般是内核缓冲区可读/可写),内核就能够将文件描述符的就绪状态返回给用户进程(或者线程),用户空间可以根据文件描述符的就绪状态进行相应的IO系统调用。
在这里插入图片描述

4、异步IO模型

在异步IO模型中,当用户线程收到通知时,数据已经被内核读取完毕并放在了用户缓冲区内,内核在IO完成后通知用户线程直接使用即可。
异步IO类似于Java中典型的回调模式,用户进程(或者线程)向内核空间注册了各种IO事件的回调函数,由内核去主动调用。
在这里插入图片描述

相关内容

热门资讯

视频丨关税重压下,美婴幼儿产品... 转自:央视新闻客户端 美国一家婴幼儿用品商店老板近日在接...
融安金桔排名上升11位,品牌价... 今日,在刚刚举行的2025中国品牌价值评价信息发布暨论坛公布的最新消息:2025年融安金桔继续强势挺...
韩国女演员金宝罗与导演赵巴伦离... 转自:扬子晚报据媒体5月10日报道,韩国女演员金宝罗与导演赵巴伦最近办理了离婚手续,原因是性格不合,...
现场视频公布!法院回应“青岛行... “青岛行人相撞案”现场视频公布,法院:表述不当造成误导近日,山东省青岛市李沧区人民法院发布的“两行人...
巴印宣布停火,两国高层表态 参考消息网5月10日报道 据美联社5月10日报道,印度和巴基斯坦10日同意停火,以结束两国几十年来最...
从DeepSeek到《哪吒2》... 每经记者|彭斐    每经编辑|杨夏     伴随着DeepSeek在2025年开...
花间不说话 跳舞就好 转自:北京新闻广播 【#花间不说话 跳舞就好#】40年来...
在湖州共创更好未来——2025... 上证报中国证券网讯(记者严晓菲陈佳怡)5月的南太湖生机盎然。5月10日下午,湖州未来大会开幕。湖州市...
现场视频公布!法院就“青岛行人... 据央视新闻消息,近日,山东省青岛市李沧区人民法院发布的“两行人相撞案”普法案例引发争议,央视《法治在...
白衣天使中有太多运动健康达人,... 转自:上观新闻5月12日是第114个国际护士节,这是为纪念现代护理学科的创始人弗洛伦斯·南丁格尔作出...
关爱困境儿童,6大保障体系护苗... 转自:经济日报近日,国务院办公厅印发《关于进一步加强困境儿童福利保障工作的意见》。从民政部获悉,该《...
美国加州州长:当前关税政策“可... 转自:北京日报客户端美国加利福尼亚州州长加文·纽森日前在社交媒体发布的视频中抨击美国联邦政府,他表示...
“这个世界上,只有她同我分享过... 最近,《夜读》做了一个征集——“想看看妈妈们年轻时的照片”,得到很多网友的回应。这些老照片里定格的瞬...
快讯:印度外交部宣布停火,巴基... 据新华社报道,巴基斯坦副总理兼外长达尔10日在社交媒体上说,巴基斯坦和印度同意立即停火。据印度消息人...
2025年世界田联男子4×40... 来源:央视体育 2025年世界田联接力赛男子4×400米接力预赛,由梁宝棠、李懿卿、张起宁、付浩然组...
Waternics水武仕亮相亚... (转自:AI云科技财经)  2025年5月10日,亚洲泳池SPA博览会在广州市中国进出口商品交易会展...
文明理念如何浸润居民的日常?大... 转自:上观新闻收集来的旧工作服、纱厂棉线经过小朋友们的创意拼贴,蓝色的布头化身黄浦江水,红色的成为杨...
2025年江苏省城市足球联赛开... 转自:扬子晚报5月10日下午,以“城市荣耀,绿茵争锋”为主题的2025年江苏省城市足球联赛开幕式在镇...
“中俄双子城”解锁跨国交流新范... 转自:中国台湾网  在中国东北的边境上,黑龙江省黑河市与俄罗斯隔江相望,这里距离对岸的阿穆尔州首府布...
AI检测翻车现场:《滕王阁序》... 近日,有网友反映,朱自清经典散文《荷塘月色》在某主流论文检测系统中,被判定AI生成内容疑似度高达62...