首页 > 其他分享 >IO通信机制

IO通信机制

时间:2023-05-11 10:12:41浏览次数:33  
标签:NIO 通信 accept 阻塞 线程 IO 机制 Channel

1.IO通信模型
IO指的是input和output
网络通信的本质是网络间的数据IO。只要有IO,就会有阻塞或非阻塞的问题,无论这个IO是网络的,还是硬盘的。原因在于程序是运行在系统上的,任何形式的IO操作都需要系统支持。

2.BIO(阻塞模式)
BIO即Blocking IO,是一种阻塞式的IO。
jdk1.4版本之前的Socket即BIO模式。
BIO的问题在于accept()、read()的操作点都是被阻塞的。
服务器线程发起一个accept动作,询问操作系统是否有新的socket信息从端口X发送过来。注意,是询问操作系统。如果操作系
统没有发现有socket从指定的端口X来,那么操作系统就会等待。这样serverSocket.accept()方法就会一直等待。这就是为什么accept()方法为什么会阻塞。
如果想让BIO同时处理多个客户端请求,就必须使用多线程,即每次accept阻塞等待来自客户端请求,一旦收到连接请求就建
立通信,同时开启一个新的线程来处理这个套接字的数据读写请求,然后立刻又继续accept等待其他客户端连接请求,即为每一位客户端连接请求都创建一个线程来单独处理。

3.NIO(非阻塞模式)
NIO即non-blocking IO,是一种非阻塞式的IO。jdk1.4之后提供。
NIO三大核心部分:Channel(通道),Buffer(缓冲区),Selector(选择器)。
Buffer:容器对象,包含一些要写入或者读出的数据。在NIO库,所有数据都是用缓冲区处理的。在读取数据时,它是直接读取到缓
冲区中的;在写入数据时,也是写入到缓冲区中。任何时候访问NIO中的数据。都是通过缓冲区进行操作。
Channel:通道对象,对数据的读取和写入要通过Channel,它就像水管一样。通道不同于流的地方就是通道是双向的,可以用于读、
写和同时读写操作。Channel不会直接处理字节数据,而是通过Buffer对象来处理数据。
Selector:多路复用器,选择器。提供选择已经就绪的任务的能力。Selector会不断轮询注册在其上的Channel,如果某个Channe
l上面发生读或者写事件,这个Channel就处于就绪状态,会被Selector轮询出来,进行后续的I/O操作。这样服务器只需要一两个线程就可以进行多客户端通信。

4.阻塞/非阻塞、同步/非同步
阻塞IO和非阻塞IO这两个概念是程序级别的。主要描述的是程序请求操作系统IO操作后,如果IO资源没有准备好,那么程序如何处
理的问题:前者等待;后者继续执行(并且使用线程一直轮询,直到有IO资源准备好了)。

同步IO和非同步IO,这两个概念是操作系统级别。主要描述的是操作系统在收到程序请求IO操作后,如果IO资源没有准备好,该如
何响应程序的问题:前者不响应,直到IO资源准备好以后;后者返回一个标记(好让程序和自己知道以后的数据往哪里通知),当
IO资源准备好以后,再用事件机制返回给程序。

关注我的公众号SpaceObj 领取idea系列激活码

标签:NIO,通信,accept,阻塞,线程,IO,机制,Channel
From: https://www.cnblogs.com/zhanghongrui/p/17390204.html

相关文章

  • socket机制
    1.概述:Socket,又称为套接字,用于描述IP地址和端口。应用程序通常通过socket向网络发出请求或者应答网络请求。Socket就是网络编程提供的一种机制:通信两端都有socket;网络通信其实就是socket之间的通信;数据在两个socket之间通过io传输。网络编程也称作为socket编程,套接字编程。......
  • Python打包exe,执行报player组件缺失“File "plyer\facades\notification.py", line
    之前的打包方式:pyinstaller--onefile--windowedpythonfilename.py执行exe报错:修改打包命令:pyinstaller--onefile--windowed--hidden-importplyer.platforms.win.notificationpythonfilename.py执行新的exe,正常弹窗,错误消失,win10toast组件实现类似功能,打包也......
  • ios 的UI设计
    颜色https://codershigh.github.io/guidelines/ios/human-interface-guidelines/visual-design/color/index.htmldark模式适配https://www.kodeco.com/10718147-supporting-dark-mode-adapting-your-app-to-support-dark-mode#toc-anchor-009......
  • conventional-changelog
    onventional-changelog是一款可以根据项目的commit和metadata信息自动生成changelogs和releasenotes的系列工具,并且在辅助standard-version工具的情况下,可以自动帮你完成生成version、打tag,生成CHANGELOG等系列过程。{ "scripts":{ "version":"conventional......
  • date or other data normalization general solution in pandas
    importpandasaspdimportnumpyasnpfromsklearn.preprocessingimportMinMaxScalerimporttime #ofcourseyoucanusebasicpandasapidoingthisjob,butI'dprefergeneralsolutionherebydefconvert_to_timestamp(x):  """C......
  • 通过构建完整研发管理体系,建立管理机制,让技术组织聚焦目标,高效运转,同时激励团队不断优
    背景  技术管理者(技术总监/经理/CTO)期望通过体系化的管理方式建设,能够在百人,千人以上的团队中有效的构建聚焦目标,自我成长,高效能的研发作战团队,快速拿出成果,支撑业务的快速发展。痛点从小团队人员快速扩张,团队文化稀释,人员效能下降,目标逐渐弱化。各自团队管理方式及......
  • SystemVerilog for Design Edition 2 Chapter 4
    SystemVerilogforDesignEdition2Chapter4SystemVerilogUser-DefinedandEnumeratedTypesSystemVerilogmakesasignificantextensiontotheVeriloglanguagebyallowinguserstodefinenewnetandvariabletypes.User-definedtypesallowmodelingcomp......
  • go的IO读取与写入
    func(s*SealosInstaller)appendAPIServer()error{etcHostPath:="/etc/hosts"etcHostMap:=fmt.Sprintf("%s%s",IPFormat(s.Masters[0]),APIServer)file,err:=os.OpenFile(etcHostPath,os.O_RDWR|os.O_APPEND,0666)iferr!=......
  • wavefront propagation(波前传播)
    房间划分任务多次遇见wavefrontpropagation,波前传播算法可用于为二维图中未标记的点分配适当的标签。该算法背后的基本思想是从标记点开始,然后将它们的标签传播到相邻点,直到图中的所有点都被标记。以下是有关如何使用波前传播算法标记未标记点的分步指南:首先识别图中所有标记......
  • Stable Diffusion 的随机种子 seed
    seed参数允许您指定一个随机种子,将用于初始化图像生成过程。相同的种子值每次都会产生相同的图像集,这对于再现性和一致性很有用。如果将种子值保留为-1,则每次运行文本-图像特性时将生成一个随机种子。最重要的是,具有相同参数、prompt和seed将产生完全相同的图像。多亏了这......