WordPress生成网站地图,电子商务网站建设有什么意义,wordpress显示文章摘要,wordpress上线本篇将想给详细解释一下什么是BIO、NIO、IO多路复用以及AIO~
同步的阻塞(BIO)和非阻塞(NIO)的区别
BIO#xff1a;线程发来IO请求后#xff0c;一直阻塞着IO线程#xff0c;需要缓冲区这边数据准备好之后#xff0c;才会进行下一步的操作。
举个#x1f330;#xff1…本篇将想给详细解释一下什么是BIO、NIO、IO多路复用以及AIO~
同步的阻塞(BIO)和非阻塞(NIO)的区别
BIO线程发来IO请求后一直阻塞着IO线程需要缓冲区这边数据准备好之后才会进行下一步的操作。
举个你去店里买蛋糕但是店里只有一位服务员这个时候你选中某个蛋糕并告诉服务员后服务员会给你现做所以这个时候你需要进行等待直到店员给你做好后你才能离开。 如果说有两个人同时来点餐这时店员还是只有一个那这样就只能是店员先做完你的蛋糕之后再去询问另外一个客户需要什么然后再去做另外一个客户的蛋糕~
NIO:线用户线程不用原地等待IO缓冲区数据准备好后再去做其他操作在这期间用户线程也可以做其他操作。
再举个你去店里买蛋糕这个时候你点完蛋糕后可以走开店员可以服务下一个客户但是你需要是不是看看你的蛋糕有没有做好
理解了文字后看图应该就好理解了 好现在理解了同步的IO逻辑再来看看异步的~
异步AIO
因为都异步了所以就不存在阻塞的问题了所以这里就只有异步非阻塞(AIO)的概念
这里先说一下NIO实际上还是堵塞的每次我们都需要去通过轮询的方法去查看有没有准备好数据所以也相当于有一段等待的时间
AIO用户线程只需要告诉内核等缓冲区数据准备好以后通知我或者执行我给你的绘制函数就行了。
举个还是你去买蛋糕同样只有一个服务员这个时候你选择完蛋糕后服务员会给你做但是这个时候就不是时不时盯着看有没有做好了因为做好了会直接通知你就像是现在的手机点餐一样餐品准备好以后手机小程序就会提醒你取餐在这之前你可以离开蛋糕店去做其他的事情。
AIO异步非阻塞 那NIO和IO多路复用有什么区别呢
对于IO多路复用来说就像是你去购买蛋糕这个时候你只需要在手机上点餐就行了一旦服务员出餐你就需要看看是不是你的(不一定是定时查看)对于NIO来说你需要排队去点餐而且点完餐之后你需要不断定时检查你的蛋糕有没有做好。
NIONon-blocking I/O
非阻塞模式NIO允许线程发起I/O请求后立即返回不必等待I/O操作完成。线程可以继续执行其他任务当I/O操作准备好时线程会被通知。缓冲区BufferNIO使用缓冲区来处理数据这意味着数据读写都是通过缓冲区进行的提供了更灵活的数据操作方式。通道ChannelNIO通过通道来读取和写入数据通道是双向的可以用于读取也可以用于写入。选择器SelectorNIO引入了选择器它允许单个线程管理多个通道的I/O操作。选择器轮询注册在其上的通道当某个通道准备好进行I/O操作时选择器会通知相应的线程进行处理。
IO多路复用I/O Multiplexing
非阻塞模式类似于NIOIO多路复用也允许线程非阻塞地发起I/O请求。事件驱动IO多路复用通过监听多个I/O通道上的事件如连接打开、数据到达等并根据事件来执行相应的操作。一对一关系尽管IO多路复用可以同时监控多个I/O通道但通常每个通道还是需要一个独立的线程来处理。效率提升通过减少线程数量IO多路复用可以提高系统处理大量并发连接的能力。
总结
NIO 提供了非阻塞I/O操作使用缓冲区、通道和选择器来实现高效的并发I/O处理。IO多路复用 也提供了非阻塞I/O操作但通常需要为每个通道分配一个线程它通过监听事件来处理I/O操作。
听完这些概念后可能你就有点儿糊涂了没关系我们现在再来梳理总结一下~
BIO(同步阻塞)线程发来IO请求后一直阻塞线程直到缓冲区数据准备好返回后才会释放就像蛋糕店一个服务员必须做完你的蛋糕才能去做下一个蛋糕
NIO(同步非阻塞)线程IO不用等待缓冲区数据准备好在这期间可以执行其他线程后面通过轮询的方式查看缓冲区数据有没有准备好(你需要去前台告诉服务员需要什么你需要定时去看你的餐有没有做好)
IO多路复用我的理解意思差不多和NIO意思差不多只不过NIO需要通过轮询来从缓冲区查看数据有没有准备好但是IO多路复用不需要
AIO(异步非阻塞)线程只需要告诉内核等缓冲区数据准备好以后直接返回或者通过回调方法直接进行返回就行了(想象蛋糕店点餐手机点餐餐品准备好后手机小程序会提示你取餐)
希望你能有所收获~