I/O编程:同步io和异步io
I/O:在计算机中意思是输入输出,由于程序和运行中的数据在内存中存留,是由cpu来执行的,涉及到数据交换的地方(磁盘和网络)就需要IO接口。 由于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。