IO(input/output),指的是计算机中数据的输入与输出。即是将进程的内部数据输送到外部设备,外部设备的数据输送到进程内部。(外部设备一般有硬盘,scoket通讯的网卡)。由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘、网络等,就需要IO接口(IO接口简单理解就是物理接口,例如:如果是通过网路进行交换,那么他的IO接口就是网线接口。)
例如:我问向谷歌浏览器发送一个打开百度的请求,这个程序需要通过网络的IO获取网页信息,这时浏览器需要向百度服务器传输数据,这就是数据的输出(Output),百度服务器接收到信息,放送一个结果给浏览器,这就是数据的输入(input)。
由于CPU和内存的传输速度远远大于外部设备的速度,所以,在IO编程中,就存在速度严重不匹配的问题。举个例子来说,比如要把1G的数据写入U盘,CPU输出1G的数据只需要0.1秒,可是磁盘要接收这1G数据可能需要10秒,怎么办呢?有两种办法:
第一种是“同步IO”,CPU等着,也就是程序暂停执行后续代码,等1G的数据在10秒后写入 U盘,再接着往下执行;
另一种方法是"异步IO".CPU不等待,只是告诉U盘,"我先去做其他事情,你慢慢写“,于是,后续代码可以立刻接着执行;
思考:很明显使用异步IO来编写程序效率远远高于同步IO,但异步IO的编程模式非常复杂,里面的一些回调模式,轮询模式,后续服务器开发涉及时再进行讲解。
——————————————