鱼竿

Linux_I/O模型

隐身守侯 提交于 2020-01-23 11:31:02
I/O模型(I/O Models) 阻塞式I/O(blocking I/O) 非阻塞式I/O(nonblocking I/O) I/O多路复用(I/O multiplexing) 信号驱动I/O(signal driven I/O) 异步I/O(asynchronous I/O) 对于一个network I/O涉及两个系统对象,一个是调用I/O的进程(process),另一个是系统内核(kernel)。 下面用read操作来当做例子,当一个read操作发生时涉及的两个步骤: 等待内核将数据准备好 内核将准备好的数据拷贝到进程,也就是从kernel space拷贝到user space 对于一个socket的read操作,第一步通常是等待网络数据。当包到达时,会先拷贝到内核的内存中。然后第二步,把数据从内核的缓冲区拷贝到应用程序的缓冲区。 阻塞式I/O(blocking I/O) 姜太公钓鱼,愿者上钩。鱼竿丢下去,就等到鱼上来,啥事不干,啥事也干不了。 当应用程序调用recvfrom这个system call,kernel只有等到准备好数据,把数据拷贝到应用程序的缓冲区,才会返回。应用程序在调用recvfrom后,如果kernel没有准备好数据,会被“睡觉”。进程一直阻塞着,在呼叫recvfrom这个system call之后,直到kernel返回数据,或者错误。 blocking

IO概念和五种IO模型

霸气de小男生 提交于 2019-12-05 22:53:47
一、什么是IO? 我们都知道unix世界里、一切皆文件、而文件是什么呢?文件就是一串二进制流而已、不管socket、还是FIFO、管道、终端、对我们来说、一切都是文件、一切都是流、在信息交换的过程中、我们都是对这些流进行数据的收发操作、简称为I/O操作(input and output)、往流中读出数据、系统调用read、写入数据、系统调用write、不过话说回来了、计算机里有这么多的流、我怎么知道要操作哪个流呢?做到这个的就是文件描述符、即通常所说的fd、一个fd就是一个整数、所以对这个整数的操作、就是对这个文件(流)的操作、我们创建一个socket、通过系统调用会返回一个文件描述符、那么剩下对socket的操作就会转化为对这个描述符的操作、不能不说这又是一种分层和抽象的思想。 二、IO交互 通常用户进程中的一个完整IO分为两个阶段: 用户空间<------------->内核空间、 内核空间<------------->设备空间、 内核空间中存放的是内核代码和数据、而进程的用户空间中存放的是用户程序的代码和数据、不管是内核空间还是用户空间、它们都处于虚拟空间中、Linux使用两级保护机制:0级供内核使用、3级供用户程序使用、 操作系统和驱动程序运行在内核空间、应用程序运行在用户空间、两者不能简单地使用指针传递数据、因为Linux使用的虚拟内存机制

五种IO模型

柔情痞子 提交于 2019-11-30 19:03:25
IO的产生   I/O输入/输出(Input/Output),分为IO设备和IO接口两个部分.   当用户进程调用了recvfrom这个系统调用,就引发了一次IO过程,这个时候的IO就要等待系统去磁盘上将数据读取读来,再拷贝到进程中 在网络情况下,IO通常分为两步   1.等待系统准备数据   2.数据从内核中拷贝到进程中   如果想提高IO的效率,就要减少准备数据的时间. 通常的IO模型分为5种   1.阻塞IO   2.非阻塞IO   3.事件驱动IO   4.多路复用IO   5.异步IO 1.阻塞IO   在内核将数据拷贝到进程中之前,整个进程都处在等待状态,就是阻塞IO   A拿着一支鱼竿在河边钓鱼,并且一直在鱼竿前等,在等的时候不做其他的事情,十分专心。只有鱼上钩的时,才结束掉等的动作,把鱼钓上来。       2.非阻塞IO   每次进程询问内核是否有数据准备好,即文件描述符缓冲区是否就绪。当有数据报准备好时,就进行拷贝数据报的操作。当没有数据报准备好时,也不阻塞程序,内核直接返回未准备就绪的信号,等待用户程序的下一个轮寻,减少数据等待的时间,当准备数据时,进程是在非阻塞状态的,可以去做一些其他操作.   B也在河边钓鱼,但是B不想将自己的所有时间都花费在钓鱼上,在等鱼上钩这个时间段中,B也在做其他的事情(一会看看书,一会读读报纸,一会又去看其他人的钓鱼等)

项目管理:故事12-简单道理

浪子不回头ぞ 提交于 2019-11-29 06:23:19
从前,有两个饥饿的人得到了一位长者的恩赐:一根鱼竿和一篓鲜活硕大的鱼。其中 ,一个人要了一篓鱼,另一个人要了一根鱼竿,于是他们分道扬镳了。得到鱼的人原地就 用干柴搭起篝火煮起了鱼,他 狼吞虎咽,还没有品出鲜鱼的肉香,转瞬间,连鱼带汤就 被他吃了个精光,不久,他便饿死在空空的鱼篓 旁。另一个人则提着鱼竿继续忍饥挨饿 ,一步步艰难地向海边走去,可当他已经看到不远处那片蔚蓝色的 海洋时,他浑身的最 后一点力气也使完了,他也只能眼巴巴地带着无尽的遗憾撒手人间。  又有两个饥饿的人,他们同样得到了长者恩赐的一根鱼竿和一篓鱼。只是他们并没有 各奔东西,而 是商定共同去找寻大海,他俩每次只煮一条鱼,他们经过遥远的跋涉,来 到了海边,从此,两人开始了捕 鱼为生的日子,几年后,他们盖起了房子,有了各自的 家庭、子女,有了自己建造的渔船,过上了幸福安康的生活。  一个人只顾眼前的利益,得到的终将是短暂的欢愉;一个人目标高远,但也要面对现 实的生活。  只有把理想和现实有机结合起来,才有可能成为一个成功之人。有时候,一个简单的 道理,却足以 给人意味深长的生命启示。 来源: https://blog.csdn.net/weixin_44523387/article/details/100538184