2022-6月更文挑战22-IO相关知识

88 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第22天,点击查看活动详情

IO相关知识

前文

IO,顾名思义,可以理解为输入以及输出。IO相关内容是在开发中非常常用的知识内容,网络通信以及文简的读取都是十分常用的IO处理。本文主要以对IO的一些知识进行总结,其中难免存在不准确之处。

阻塞和非阻塞

在看IO实际的内容之前,需要先来了解一下阻塞以及非阻塞的知识。所谓阻塞,也就是当任务在进行执行时,需要等到程序执行完毕才能继续后面的操作,在执行完毕前需要将执行线程挂起,不能进行其他的操作。而非阻塞则是当任务执行过程中时,如果不能直接得到结果,也不会对于当前的线程进行阻塞,可以执行其他的任务。举个例子来说,假设我们进行一个冲咖啡操作,如果是阻塞的,那么在咖啡冲好之前不能去做其他的事,而非阻塞则是在咖啡冲好之前我们可以去给手机充电,再回来看咖啡是否已经冲好。

同步和异步

提到IO又不可避免的提到同步和异步的概念。同步简单来说就是做一件事的时候不能去做其他的事,而异步则是可以处理其他的事情,等待系统层级的通知即可。

BIO

首先来看一下BIO相关的知识。BIO是一种传统的IO,可以列结尾阻塞IO,也就是当有多个IO相关的请求需要处理时,同时处理的数目也就和线程数量相关联。只有当某个请求执行完毕时,才会对下一个请求进行处理。显然,这是一种效率上会有问题的操作方式。

NIO

这是一种非阻塞IO,也是更常用的一种IO处理方式。它与BIO的区别则是额外采用了一个selector的概念。当请求到来时,首先利用selector进行处理,分发给单独的线程去操作。selector只是一个选择器,后面采用单独的线程进行逻辑上的处理。以此方式通过异步及非阻塞实现IO处理上的效率优化。

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。