石家庄网站建设公司黄页,不会写代码怎么做网站,泰安直聘网官网,蝙蝠做等级的网站题外话#xff1a;我们现在要仔细的说一说I/O多路复用机制#xff0c;因为这个说法实在是太通俗了#xff0c;通俗到一般人都不懂是什么意思。博主打一个比方#xff1a;小曲在S城开了一家快递店#xff0c;负责同城快送服务。小曲因为资金限制#xff0c;雇佣了一批快递…题外话我们现在要仔细的说一说I/O多路复用机制因为这个说法实在是太通俗了通俗到一般人都不懂是什么意思。博主打一个比方小曲在S城开了一家快递店负责同城快送服务。小曲因为资金限制雇佣了一批快递员然后小曲发现资金不够了只够买一辆车送快递。 经营方式一客户每送来一份快递小曲就让一个快递员盯着然后快递员开车去送快递。慢慢的小曲就发现了这种经营方式存在下述问题 几十个快递员基本上时间都花在了抢车上了大部分快递员都处在闲置状态谁抢到了车谁就能去送快递 随着快递的增多快递员也越来越多小曲发现快递店里越来越挤没办法雇佣新的快递员了 快递员之间的协调很花时间 综合上述缺点小曲痛定思痛提出了下面的经营方式 经营方式二小曲只雇佣一个快递员。然后呢客户送来的快递小曲按送达地点标注好然后依次放在一个地方。最后那个快递员依次的去取快递一次拿一个然后开着车去送快递送好了就回来拿下一个快递。 对比上述两种经营方式对比是不是明显觉得第二种效率更高更好呢。在上述比喻中: 每个快递员------------------每个线程 每个快递--------------------每个socket(I/O流) 快递的送达地点--------------socket的不同状态 客户送快递请求--------------来自客户端的请求 小曲的经营方式--------------服务端运行的代码 一辆车----------------------CPU的核数 于是我们有如下结论1、经营方式一就是传统的并发模型每个I/O流(快递)都有一个新的线程(快递员)管理。2、经营方式二就是I/O多路复用。只有单个线程(一个快递员)通过跟踪每个I/O流的状态(每个快递的送达地点)来管理多个I/O流。 下面类比到真实的redis线程模型如图所示 参照上图简单来说就是。我们的redis-client在操作的时候会产生具有不同事件类型的socket。在服务端有一段I/0多路复用程序将其置入队列之中。然后文件事件分派器依次去队列中取转发到不同的事件处理器中。需要说明的是这个I/O多路复用机制redis还提供了select、epoll、evport、kqueue等多路复用函数库大家可以自行去了解。 转载于:https://www.cnblogs.com/zuichuyouren/p/11122674.html