当前位置: 首页 > news >正文

做企业商城网站网络培训

做企业商城网站,网络培训,北京疫情死了有50万人,求职网站建设我们在平常开发过程中接触最多的就是 磁盘 IO(读写文件) 和 网络 IO(网络请求和响应)。从应用程序的视角来看的话,我们的应用程序对操作系统的内核发起 IO 调用(系统调用),操作系统负…

我们在平常开发过程中接触最多的就是 磁盘 IO(读写文件) 和 网络 IO(网络请求和响应)。从应用程序的视角来看的话,我们的应用程序对操作系统的内核发起 IO 调用(系统调用),操作系统负责的内核执行具体的 IO 操作。也就是说,我们的应用程序实际上只是发起了 IO 操作的调用而已,具体 IO 的执行是由操作系统的内核来完成的。
当应用程序发起 I/O 调用后,会经历两个步骤:

  1. 内核等待 I/O 设备准备好数据
  2. 内核将数据从内核空间拷贝到用户空间。

首先,解释一下这里的阻塞与非阻塞:

阻塞IO,指的是需要内核IO操作彻底完成后,才返回到用户空间,执行用户的操作。阻塞指的是用户空间程序的执行状态,用户空间程序需等到IO操作彻底完成。传统的IO模型都是同步阻塞IO。在java中,默认创建的socket都是阻塞的。

其次,解释一下同步与异步:

同步IO,是一种用户空间与内核空间的调用发起方式。同步IO是指用户空间线程是主动发起IO请求的一方,内核空间是被动接受方。异步IO则反过来,是指内核kernel是主动发起IO请求的一方,用户线程是被动接受方。

同步阻塞 I/O

同步阻塞 I/O 是最简单的一种 I/O 模型。在这种模型下,I/O 操作会阻塞调用线程,直到操作完成。
应用程序发起 read 调用后,会一直阻塞,直到内核把数据拷贝到用户空间。
在这里插入图片描述

特点:

  • 阻塞: 线程在发起 I/O 操作时会被阻塞,直到 I/O 操作完成(即数据被读入或写入)。
  • 简单易用: 编程模型简单,容易理解和实现。
  • 效率问题: 当有多个 I/O 操作时,线程可能会因为等待 I/O 完成而浪费时间,从而导致性能瓶颈。

举例:BIO (Blocking I/O)

同步非阻塞 I/O

同步非阻塞 I/O 允许线程在发起 I/O 操作时立即返回,线程可以在 I/O 操作未完成时继续执行其他任务。
在这里插入图片描述

特点:

  • 非阻塞: I/O 操作不会阻塞线程,线程可以继续执行其他任务。
  • 轮询: 需要使用轮询机制(例如 select())来检查 I/O 操作是否完成,从而确定是否可以读取数据。
  • 复杂性: 编程模型比阻塞 I/O 复杂,需要显式地处理 I/O 操作的完成状态。
    举例:NIO (Non-blocking/New I/O)

过程:同步非阻塞 IO 模型中,应用程序会一直发起 read 调用,等待数据从内核空间拷贝到用户空间的这段时间里,线程依然是阻塞的,直到在内核把数据拷贝到用户空间。

比较:相比于同步阻塞 IO 模型,同步非阻塞 IO 模型确实有了很大改进。通过轮询操作,避免了一直阻塞。

问题:应用程序不断进行 I/O 系统调用轮询数据是否已经准备好的过程是十分消耗 CPU 资源的。

这个时候,I/O 多路复用模型 就上场了。

I/O 多路复用

I/O 多路复用 允许一个线程同时管理多个 I/O 操作。通过使用系统提供的多路复用机制,线程可以等待多个 I/O 操作的完成,而无需为每个操作创建一个独立的线程。
在这里插入图片描述

特点:

  • 高效: 能够有效地管理多个 I/O 操作,避免了为每个连接创建线程的开销。
  • 系统调用: 使用系统调用(如 select()、poll()、epoll())来检查多个通道的状态。

IO 多路复用模型中,线程首先发起 select 调用,询问内核数据是否准备就绪,等内核把数据准备好了,用户线程再发起 read 调用。read 调用的过程(数据从内核空间 -> 用户空间)还是阻塞的。

目前支持 IO 多路复用的系统调用,有 select,epoll 等等。select 系统调用,目前几乎在所有的操作系统上都有支持。

  • select 调用:内核提供的系统调用,它支持一次查询多个系统调用的可用状态。几乎所有的操作系统都支持。
  • epoll 调用:linux 2.6 内核,属于 select 调用的增强版本,优化了 IO 的执行效率。

IO 多路复用模型,通过减少无效的系统调用,减少了对 CPU 资源的消耗。

Java 中的 NIO ,有一个非常重要的选择器 ( Selector ) 的概念,也可以被称为 多路复用器。通过它,只需要一个线程便可以管理多个客户端连接。当客户端数据到了之后,才会为其服务。

在这里插入图片描述

信号驱动 I/O

信号驱动 I/O 是一种基于信号的 I/O 模型,通过信号通知应用程序某个 I/O 操作已准备好。应用程序可以在接收到信号时执行相应的 I/O 操作。

特点:

  • 信号通知: 使用信号(如 SIGIO)来通知应用程序 I/O 操作的完成或准备好。
  • 操作系统依赖: 通常依赖于操作系统的特定实现,因此在不同平台上的可移植性较差。

异步 I/O

异步 I/O 允许应用程序发起 I/O 操作后,立即继续执行其他任务。当 I/O 操作完成时,系统会通知应用程序,并通常会调用一个回调函数来处理结果。

异步 IO 是基于事件和回调机制实现的,也就是应用操作之后会直接返回,不会堵塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。

举例:AIO (Asynchronous I/O)
在这里插入图片描述

特点:

  • 非阻塞: 线程可以发起 I/O 操作后立即返回,异步 I/O 操作会在后台完成。
  • 回调机制: 当 I/O 操作完成时,系统会调用注册的回调函数。
  • 复杂性: 需要处理异步事件和回调函数,编程模型较为复杂。

总结

  • 同步阻塞 I/O: 简单易用,但效率较低,容易造成线程阻塞。
  • 同步非阻塞 I/O: 允许线程在 I/O 操作期间执行其他任务,但需要显式轮询。
  • I/O 多路复用: 提高了对多个 I/O 操作的处理能力,适合高并发场景。
  • 信号驱动 I/O: 使用信号通知 I/O 状态变化,但在不同操作系统上可移植性较差。
  • 异步 I/O: 非常高效,通过回调机制处理 I/O 操作,适合处理大量并发任务。

参考:
程序员应该这样理解IO
如何完成一次IO
IO模型知多少
10 分钟看懂, Java NIO 底层原理

http://www.hyszgw.com/news/7036.html

相关文章:

  • 微信上微网站怎么做的吗柳州今日头条新闻
  • 什么网站找厂做袜子网站正能量免费推广软件
  • 中间商网站怎么做网络推广需要多少钱
  • 深圳企业网站制作服务精准信息预测
  • 怎样做教育视频网站软文推广案例500字
  • 郑州网站建设培训短期班网站为什么要seo?
  • 网站建设网络推广方案免费b站推广网站
  • 自定义网站建设团队深圳优化公司义高粱seo
  • 哪个网站公司做的好网络广告推广公司
  • 做产品表情的网站企业域名查询
  • 盐城做网站企业免费发广告的平台有哪些
  • 网站建设和维护视频关键词优化一年多少钱
  • 长沙网站外包网站排名优化公司哪家好
  • 视觉设计的网站百度指数下载app
  • 专门给别人做网站seo搜索引擎优化价格
  • 用wordpress做网站百度快照投诉中心
  • 自己用电脑网站建设如何做百度免费推广
  • 谷歌做自己的网站企业seo推广的绝密诀窍曝光
  • 泰安网站设计竞价托管咨询微竞价
  • 淄博网站制作平台形象哈尔滨网站制作软件
  • 北京做网站的公司排名腰椎间盘突出压迫神经腿疼怎么治
  • 黑龙江省城乡和住房建设厅网站首页广告平台推广渠道
  • 电商网站项目宁波seo外包服务
  • 做水电到哪个网站找信息十大搜索引擎入口
  • 做网站时候如果添加微信代码广州宣布5条优化措施
  • 好用的免费建站网站百度官方网首页
  • wordpress顶部广告怎么添加附子seo教程
  • 凡科做网站给后台的吗优化seo是什么意思
  • 做网站需要用什么软件建设公司网站大概需要多少钱?
  • 网站名称图标如何做才能显示个人永久免费自助建站