本文作者主要技术偏向为互联网后端、高并发高性能服务器、检索引擎技术网名是“码农的荒岛求生”民众号“码农的荒岛求生”。
本文作者主要技术偏向为互联网后端、高并发高性能服务器、检索引擎技术网名是“码农的荒岛求生”民众号“码农的荒岛求生”。谢谢作者的无私分享。
1、系列文章引言1.1 文章目的
以上这一切都是I/O!
明白了这一点你就能明确执行I/O操作时底层都发生了什么。
1.2 文章源起
应作者要求不提供真名也不提供小我私家照片。
越往知识的深处走越以为对即时通讯技术相识的太少。于是厥后为了让开发者门更好地从基础电信技术的角度明白网络(尤其移动网络)特性我跨专业收集整理了《IM开发者的零基础通信技术入门》系列高阶文章。这系列文章已然是普通即时通讯开发者的网络通信技术知识界限加上之前这些网络编程资料解决网络通信方面的知识盲点基本够用了。
在上一篇《深入盘算机底层明白线程与线程池》中我们引入了历程和线程的观点。
1.3 文章目录
1)《从根上明白高性能、高并发(一):深入盘算机底层明白线程与线程池》 2)《从根上明白高性能、高并发(二):深入操作系统明白I/O与零拷贝技术》(* 本文) 3)《从根上明白高性能、高并发(三):深入操作系统彻底明白I/O多路复用 (稍后公布..)》 4)《从根上明白高性能、高并发(四):深入操作系统彻底明白同步与异步 (稍后公布..)》 5)《从根上明白高性能、高并发(五):高并发高性能服务器到底是如何实现的 (稍后公布..)》1.4 本篇概述
当历程A被暂停执行后CPU是不行以闲下来的因为停当行列中另有嗷嗷待哺的历程B这时操作系统开始在停当行列中找下一个可以执行的历程也就是这里的历程B。
本文解说的是法式员常用的I/O(包罗所谓的网络I/O)一般来说作为法式员我们无需体贴可是明白I/O背后的底层原理对于设计好比IM这种高性能、高并发系统是极为有益的希望这篇能对大家加深对I/O的认识有所资助。
2、本文作者(同步公布链接是:http://www.52im.net/thread-3280-1-1.html)
如下图所示:
3、不能执行I/O的盘算机是什么?操作系统检测到历程向I/O设备提倡请求后就暂停历程的运行怎么暂停运行呢?很简朴:只需要记载下当前历程的运行状态并把CPU的PC寄存器指向其它历程的指令就可以了。
1)当我们使用C语言中的printf、C++中的"<<"Python中的printJava中的System.out.println等时; 2)当我们使用种种语言读写文件时; 3)当我们通过TCP/IP举行网络通信时; 4)当我们使用鼠标鸾翔凤翥时; 5)当我们拿起键盘在评论区指点山河亦或是笃志苦干努力制造bug时; 6)当我们能看到屏幕上的漂亮的图形界面时等等。作为即时通讯技术的开发者来说高性能、高并发相关的技术观点早就了然与胸什么线程池、零拷贝、多路复用、事件驱动、epoll等等名词信手拈来又或许你对具有这些技术特征的技术框架好比:Java的Netty、Php的workman、Go的nget等熟练掌握。
但真正到了面视或者技术实践历程中遇到无法释怀的疑惑时方知自已所掌握的不外是皮毛。
很显然更好的方法就是先去干其它事情快递来了再说。
如下图所示:
4、什么是I/O?1read(buff);
今后历程B继续执行历程A继续等候历程B执行了一会儿后操作系统认为历程B执行的时间够长了因此把历程B放到停当行列把历程A取出并继续执行。
这种历程执行I/O操作被阻塞暂停执行的方式被称为阻塞式I/Oblocking I/O这也是最常见最容易明白的I/O方式有阻塞式I/O就有非阻塞式I/O在这里我们暂时先不思量这种方式。
你可能会问为什么不直接执行非要有个停当行列呢?谜底很简朴:那就是僧多粥少在纵然只有1个核的机械上也可以建立出成千上万个历程CPU不行能同时执行这么多的历程因此一定存在这样的历程纵然其一切准备停当也不能被分配到盘算资源这样的历程就被放到了停当行列。
如果数据是从内存copy到外部设备这就是Output。
历程A继续执行此时buff中已经装满了想要的数据历程A就这样愉快的运行下去了就似乎从来没有被暂停过一样历程对于自己被暂停一事一无所知这就是操作系统的邪术。