IO编程

作者: 谢大见 | 来源:发表于2019-03-04 16:45 被阅读0次

原文: https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431917590955542f9ac5f5c1479faf787ff2b028ab47000

IO编程

IO在计算机中指Input/Output,也就是输入和输出。

由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘、网络等,就需要IO接口。

比如你打开浏览器,访问新浪首页,浏览器这个程序就需要通过网络IO获取新浪的网页。

浏览器首先会发送数据给新浪服务器,告诉它我想要首页的HTML,这个动作是往外发数据,叫Output,随后新浪服务器把网页发过来,这个动作是从外面接收数据,叫Input。

所以,通常,程序完成IO操作会有Input和Output两个数据流。

当然也有只用一个的情况,比如,从磁盘读取文件到内存,就只有Input操作,反过来,把数据写到磁盘文件里,就只是一个Output操作。

IO编程中,Stream(流)是一个很重要的概念,可以把流想象成一个水管,数据就是水管里的水,但是只能单向流动。

Input Stream就是数据从外面(磁盘、网络)流进内存,Output Stream就是数据从内存流到外面去。

对于浏览网页来说,浏览器和新浪服务器之间至少需要建立两根水管,才可以既能发数据,又能收数据。

由于CPU和内存的速度远远高于外设的速度,所以,在IO编程中,就存在速度严重不匹配的问题。

举个例子来说,比如要把100M的数据写入磁盘,CPU输出100M的数据只需要0.01秒,可是磁盘要接收这100M数据可能需要10秒,怎么办呢?有两种办法:

第一种是CPU等着,也就是程序暂停执行后续代码,等100M的数据在10秒后写入磁盘,再接着往下执行,这种模式称为同步IO;

另一种方法是CPU不等待,只是告诉磁盘,“您老慢慢写,不着急,我接着干别的事去了”,于是,后续代码可以立刻接着执行,这种模式称为异步IO。

同步和异步的区别就在于是否等待IO执行的结果。

好比你去麦当劳点餐,你说“来个汉堡”,服务员告诉你,对不起,汉堡要现做,需要等5分钟,于是你站在收银台前面等了5分钟,拿到汉堡再去逛商场,这是同步IO。

你说“来个汉堡”,服务员告诉你,汉堡需要等5分钟,你可以先去逛商场,等做好了,我们再通知你,这样你可以立刻去干别的事情(逛商场),这是异步IO。

很明显,使用异步IO来编写程序性能会远远高于同步IO,但是异步IO的缺点是编程模型复杂。

想想看,你得知道什么时候通知你“汉堡做好了”,而通知你的方法也各不相同。

如果是服务员跑过来找到你,这是回调模式,

如果服务员发短信通知你,你就得不停地检查手机,这是轮询模式。

总之,异步IO的复杂度远远高于同步IO。

相关文章

  • python文件

    IO在计算机编程中指的是输入和输出。IO编程中,Stream(流)是一个很重要的概念。IO有同步IO和异步IO两种...

  • IO编程

    读文件 字符编码 要读取非ASCII编码的文件,要以二进制模式打开,再解码。 Python还提供了一个codecs...

  • IO编程

    文件读写 由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无...

  • IO编程

  • IO编程

    IO在计算机中是指input/output,也就是输入和输出。由于程序和运行时数据是在内存中驻留,由CPU这个超快...

  • IO编程

    文件读写 写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象...

  • IO编程

    IO在计算机中指Input/Output,也就是输入和输出。 读文件 要以读文件的模式打开一个文件对象,使用Pyt...

  • IO编程

    一、Java网络编程 https://www.runoob.com/java/java-networking.ht...

  • IO编程

    概念 Java流式I/O类都包含在java.io包中。有各种不同的流类来满足不同性质的输入/输出需要。根据流中的数...

  • IO编程

    一、网络编程基础知识 在网络环境上使用IO流进行数据传输 网络编程相关定义和实现,联网的底层细节被隐藏在 Java...

网友评论

      本文标题:IO编程

      本文链接:https://www.haomeiwen.com/subject/rrbiuqtx.html