精华内容
下载资源
问答
  • IO 多路复用是什么意思? 转自:https://www.zhihu.com/question/32163005 1 IO 多路复用是什么意思? - 罗志宇回答 - 知乎 https://www.zhihu.com/question/32163005/answer/55772739 这个还是很好说清楚。 ...

    IO 多路复用是什么意思?

    转自:https://www.zhihu.com/question/32163005

    1 IO 多路复用是什么意思? - 罗志宇的回答 - 知乎 https://www.zhihu.com/question/32163005/answer/55772739

    这个还是很好说清楚的。

    假设你是一个机场的空管, 你需要管理到你机场的所有的航线, 包括进港,出港, 有些航班需要放到停机坪等待,有些航班需要去登机口接乘客。

    你会怎么做?

    最简单的做法,就是你去招一大批空管员,然后每人盯一架飞机, 从进港,接客,排位,出港,航线监控,直至交接给下一个空港,全程监控。

    那么问题就来了:

    很快你就发现空管塔里面聚集起来一大票的空管员,交通稍微繁忙一点,新的空管员就已经挤不进来了。
    空管员之间需要协调,屋子里面就1, 2个人的时候还好,几十号人以后 ,基本上就成菜市场了。
    空管员经常需要更新一些公用的东西,比如起飞显示屏,比如下一个小时后的出港排期,最后你会很惊奇的发现,每个人的时间最后都花在了抢这些资源上。

    现实上我们的空管同时管几十架飞机稀松平常的事情, 他们怎么做的呢?
    他们用这个东西

    这个东西叫flight progress strip. 每一个块代表一个航班,不同的槽代表不同的状态,然后一个空管员可以管理一组这样的块(一组航班),而他的工作,就是在航班信息有新的更新的时候,把对应的块放到不同的槽子里面。

    这个东西现在还没有淘汰哦,只是变成电子的了而已。。

    是不是觉得一下子效率高了很多,一个空管塔里可以调度的航线可以是前一种方法的几倍到几十倍。

    如果你把每一个航线当成一个Sock(I/O 流), 空管当成你的服务端Sock管理代码的话.

    第一种方法就是最传统的多进程并发模型 (每进来一个新的I/O流会分配一个新的进程管理。)
    第二种方法就是I/O多路复用 (单个线程,通过记录跟踪每个I/O流(sock)的状态,来同时管理多个I/O流 。)

    其实“I/O多路复用”这个坑爹翻译可能是这个概念在中文里面如此难理解的原因。所谓的I/O多路复用在英文中其实叫 I/O multiplexing. 如果你搜索multiplexing啥意思,基本上都会出这个图:

    于是大部分人都直接联想到"一根网线,多个sock复用" 这个概念,包括上面的几个回答, 其实不管你用多进程还是I/O多路复用, 网线都只有一根好伐。多个Sock复用一根网线这个功能是在内核+驱动层实现的。

    重要的事情再说一遍: I/O multiplexing 这里面的 multiplexing 指的其实是在单个线程通过记录跟踪每一个Sock(I/O流)的状态(对应空管塔里面的Fight progress strip槽)来同时管理多个I/O流. 发明它的原因,是尽量多的提高服务器的吞吐能力。

    是不是听起来好拗口,看个图就懂了.

    在同一个线程里面, 通过拨开关的方式,来同时传输多个I/O流, (学过EE的人现在可以站出来义正严辞说这个叫“时分复用”了)。

    什么,你还没有搞懂“一个请求到来了,nginx使用epoll接收请求的过程是怎样的”, 多看看这个图就了解了。提醒下,ngnix会有很多链接进来, epoll会把他们都监视起来,然后像拨开关一样,谁有数据就拨向谁,然后调用相应的代码处理。

    ------------------------------------------
    了解这个基本的概念以后,其他的就很好解释了。

    select, poll, epoll 都是I/O多路复用的具体的实现,之所以有这三个鬼存在,其实是他们出现是有先后顺序的。

    I/O多路复用这个概念被提出来以后, select是第一个实现 (1983 左右在BSD里面实现的)。

    select 被实现以后,很快就暴露出了很多问题。

    select 会修改传入的参数数组,这个对于一个需要调用很多次的函数,是非常不友好的。
    select 如果任何一个sock(I/O stream)出现了数据,select 仅仅会返回,但是并不会告诉你是那个sock上有数据,于是你只能自己一个一个的找,10几个sock可能还好,要是几万的sock每次都找一遍,这个无谓的开销就颇有海天盛筵的豪气了。
    select 只能监视1024个链接, 这个跟草榴没啥关系哦,linux 定义在头文件中的,参见FD_SETSIZE。
    select 不是线程安全的,如果你把一个sock加入到select, 然后突然另外一个线程发现,尼玛,这个sock不用,要收回。对不起,这个select 不支持的,如果你丧心病狂的竟然关掉这个sock, select的标准行为是。。呃。。不可预测的, 这个可是写在文档中的哦.
    “If a file descriptor being monitored by select() is closed in another thread, the result is unspecified”
    霸不霸气

    于是14年以后(1997年)一帮人又实现了poll, poll 修复了select的很多问题,比如

    poll 去掉了1024个链接的限制,于是要多少链接呢, 主人你开心就好。
    poll 从设计上来说,不再修改传入数组,不过这个要看你的平台了,所以行走江湖,还是小心为妙。
    其实拖14年那么久也不是效率问题, 而是那个时代的硬件实在太弱,一台服务器处理1千多个链接简直就是神一样的存在了,select很长段时间已经满足需求。

    但是poll仍然不是线程安全的, 这就意味着,不管服务器有多强悍,你也只能在一个线程里面处理一组I/O流。你当然可以那多进程来配合了,不过然后你就有了多进程的各种问题。

    于是5年以后, 在2002, 大神 Davide Libenzi 实现了epoll.

    epoll 可以说是I/O 多路复用最新的一个实现,epoll 修复了poll 和select绝大部分问题, 比如:

    epoll 现在是线程安全的。
    epoll 现在不仅告诉你sock组里面数据,还会告诉你具体哪个sock有数据,你不用自己去找了。

    epoll 当年的patch,现在还在,下面链接可以看得到:
    /dev/epoll Home Page

    贴一张霸气的图,看看当年神一样的性能(测试代码都是死链了, 如果有人可以刨坟找出来,可以研究下细节怎么测的).

    横轴Dead connections 就是链接数的意思,叫这个名字只是它的测试工具叫deadcon. 纵轴是每秒处理请求的数量,你可以看到,epoll每秒处理请求的数量基本不会随着链接变多而下降的。poll 和/dev/poll 就很惨了。

    可是epoll 有个致命的缺点。。只有linux支持。比如BSD上面对应的实现是kqueue。

    其实有些国内知名厂商把epoll从安卓里面裁掉这种脑残的事情我会主动告诉你嘛。什么,你说没人用安卓做服务器,尼玛你是看不起p2p软件了啦。

    而ngnix 的设计原则里面, 它会使用目标平台上面最高效的I/O多路复用模型咯,所以才会有这个设置。一般情况下,如果可能的话,尽量都用epoll/kqueue吧。

    详细的在这里:
    Connection processing methods

    PS: 上面所有这些比较分析,都建立在大并发下面,如果你的并发数太少,用哪个,其实都没有区别。 如果像是在欧朋数据中心里面的转码服务器那种动不动就是几万几十万的并发,不用epoll我可以直接去撞墙了。

    I/O复用是不是用跟各种池一起用的?
    线程池和sock池都和具体实现有关。所以你要告诉我你指的线程池是某个实现呢,还是通常意义上的“线程池”

    通常意义上的线程池只是多线程里面对线程生命周期的一个管理方法而已(不用的线程不是直接结束掉,而是放到池里面复用, 以避免创建/销毁线程的开销),和并发模型没有关系。线程池=空管员宿舍。没有宿舍,空管员都要从家里来上班,有了宿舍,上下班开销变小。但是和空管们工作方式没有关系。

    不过很多很多的文章里面说的线程池其实是和多线程模型一起用的(多进程模型里面把进程换成线程)。这种情况一般是一个线程一个sock.

    如果用I/O复用和线程池,一般是一个线程一组I/O, 然后可能另外还有一堆工作线程处理具体数据。。

    关于socket 一个端口和多个端口通信如何通信?你注意到了accept会返回一个新的socket描述符么。。所以服务端只会监听一个端口,每次来了新的请求,都会创建一个新的sock和客户端通信。

    每个socket就是一个I/O流,不考虑协议的情况下,确实就是两端IP和端口不同(服务器可能有多个IP). 不管这个socket在不在池里面。

    展开全文
  • 软件复用是什么意思

    千次阅读 2007-05-31 20:58:00
    软件复用是将已有软件及其有效成分用于构造新软件或系统。它不仅是对软件程序的复用,还包括对软件生产过程中其它劳动成果的复用,如项目计划书、可行性报告、需求分析、概要设计、详细设计、编码(源程序)、测试...
    软件复用是将已有的软件及其有效成分用于构造新的软件或系统。它不仅是对软件程序的复用,还包括对软件生产过程中其它劳动成果的复用,如项目计划书、可行性报告、需求分析、概要设计、详细设计、编码(源程序)、测试用例、文档与使用手册等等。因此,软件复用包括软件产品复用和软件过程复用两部分的内容。 
    软件复用不同于软件移植。软件移植是指对软件进行修改和扩充,使之在保留原有功能、适应原有平台的基础上,可以运行于新的软硬件平台。而复用则指在多个系统中,尤其是在新系统中使用已有的软件成分。
    从对复用产品的了解程度和复用方式看,也可分为白盒复用与黑盒复用。黑盒复用指对已有产品或构件不需作任何修改,直接进行复用,这是理想的复用方式。它主要基于二进制代码的复用,包括可执行程序的复用和基于库(包括动态链接库和静态库)的复用。白盒复用指根据用户需求对已有产品进行适应性修改后才可使用。白盒复用一般为源代码一级的复用,以及相应的测试用例、文档等的复用。
    无论白盒复用还是黑盒复用,都需要花费一定的代价熟悉和掌握被复用的软件系统。作为经济上的考虑,要求复用的代价必须大大小于重新开发的代价,否则就不应该考虑。
    软件复用的一个关键因素是抽象。抽象是对软件可复用对象的提炼和概括,即将可复用对象的基本属性和相应的操作,从具体的语言、环境和其他细节中提炼出来。软件的复用性很大程度上取决于对可复用对象的认识深度或者说可复用对象的抽象层次。抽象层次越高、与具体环境和特定细节越无关,则它被未来系统复用的可能性也越大。领域分析则是进行抽象的有力工具。领域分析借助特定领域、特定行业的专业知识与技能,对软件系统对象进行抽象和分类,提炼认知的对象及其相互关系,获得系统整体结构,从而生成可复用的软件构件。
    通过软件复用,在应用系统开发中可以充分地利用已有的开发成果,减少了包括分析、设计、编码、测试等在内的许多重复劳动,从而提高了软件开发的效率,同时,通过复用高质量的已有开发成果,避免了重新开发可能引入的错误,从而提高了软件的质量。
    软件复用有三个基本原则,一是必须有可以复用的对象;二是所复用的对象必须是有用的,三是复用者需要知道如何去使用被复用的对象。软件复用包括两个相关过程:可复用软件(构件)的开发(Development for Reuse)和基于可复用软件(构件)的应用系统构造(集成和组装)(Development with Reuse)。解决好这几个方面的问题才能实现真正成功的软件复用。
    可复用软件(构件)的开发是实现软件复用的基本条件,对象技术的广泛使用,提供了建造和使用构件的概念基础和实用工具,有了可复用软件,基于可复用软件(构件)的应用系统构造(集成和组装)才能得以实现。软件的生产也可以象硬件的生产一样,在设计好框架后通过标准的构件组装而成。一般认为构件是具有一定功能、能够独立工作或同其他构件组合起来协调工作的程序体,一经产生,就与它的具体实现语言无关,可以认为是一段二进制码和数据段,其内部具体实现是无法看到的,可将成熟的构件当作商品出售,在保证开发者的利益同时最大地满足社会需求。采用构件来开发软件可以更有效地重用他人已有的劳动成果。
    在复用软件设计中,如何设计和构造可复用的软件是软件设计者首先要面对的问题。根据面向对象的设计原理,应着眼于以下几个方面:
    (1)封装性
    在软构件的定义中,用户只关心事件的输入输出,对事件内部不必关心,方法和事件是独立于应用的,用户可以在软构件中定义自己的事件,对于内部的复杂性调用这并不知晓,从而提高了隐蔽性。
    (2)重载
    重载就是在同一软件构件中用同一名字来表示不同的方法名。一般有两种实现方法,一是方法参数的个数重载,二是方法参数的类型重载。
    (3)继承
    继承就是高层的类在不同范围的复用。
    (4)聚合
    聚合就是把一个难以复用的大软件分成若干部分构件,使其中的某些构件成为可以复用的构件。
    (5)多态性
    多态性指某方法不仅可以处理有相同结构的对象,也可以处理不同结构的对象。
    中间件及相关软件是商业化的软件复用。仅看程序方面,软件复用后的制品也不只包括中间件软件,还包括软件框架、应用框架、通用业务构件等多种可复用形式。
     
    是指编程吗,说的是以前的程序的整体或部分可以在今后的程序编写中被引用,并实现功能
    软件复用是将已有的软件及其有效成分用于构造新的软件或系统。它不仅是对软件程序的复用,还包括对软件生产过程中其它劳动成果的复用,如项目计划书、可行性报告、需求分析、概要设计、详细设计、编码(源程序)、测试用例、文档与使用手册等等。因此,软件复用包括软件产品复用和软件过程复用两部分的内容。
    软件复用不同于软件移植。软件移植是指对软件进行修改和扩充,使之在保留原有功能、适应原有平台的基础上,可以运行于新的软硬件平台。而复用则指在多个系统中,尤其是在新系统中使用已有的软件成分。
    从对复用产品的了解程度和复用方式看,也可分为白盒复用与黑盒复用。黑盒复用指对已有产品或构件不需作任何修改,直接进行复用,这是理想的复用方式。它主要基于二进制代码的复用,包括可执行程序的复用和基于库(包括动态链接库和静态库)的复用。白盒复用指根据用户需求对已有产品进行适应性修改后才可使用。白盒复用一般为源代码一级的复用,以及相应的测试用例、文档等的复用。
    无论白盒复用还是黑盒复用,都需要花费一定的代价熟悉和掌握被复用的软件系统。作为经济上的考虑,要求复用的代价必须大大小于重新开发的代价,否则就不应该考虑。
    软件复用的一个关键因素是抽象。抽象是对软件可复用对象的提炼和概括,即将可复用对象的基本属性和相应的操作,从具体的语言、环境和其他细节中提炼出来。软件的复用性很大程度上取决于对可复用对象的认识深度或者说可复用对象的抽象层次。抽象层次越高、与具体环境和特定细节越无关,则它被未来系统复用的可能性也越大。领域分析则是进行抽象的有力工具。领域分析借助特定领域、特定行业的专业知识与技能,对软件系统对象进行抽象和分类,提炼认知的对象及其相互关系,获得系统整体结构,从而生成可复用的软件构件。
    通过软件复用,在应用系统开发中可以充分地利用已有的开发成果,减少了包括分析、设计、编码、测试等在内的许多重复劳动,从而提高了软件开发的效率,同时,通过复用高质量的已有开发成果,避免了重新开发可能引入的错误,从而提高了软件的质量。
    软件复用有三个基本原则,一是必须有可以复用的对象;二是所复用的对象必须是有用的,三是复用者需要知道如何去使用被复用的对象。软件复用包括两个相关过程:可复用软件(构件)的开发(Development for Reuse)和基于可复用软件(构件)的应用系统构造(集成和组装)(Development with Reuse)。解决好这几个方面的问题才能实现真正成功的软件复用。
    可复用软件(构件)的开发是实现软件复用的基本条件,对象技术的广泛使用,提供了建造和使用构件的概念基础和实用工具,有了可复用软件,基于可复用软件(构件)的应用系统构造(集成和组装)才能得以实现。软件的生产也可以象硬件的生产一样,在设计好框架后通过标准的构件组装而成。一般认为构件是具有一定功能、能够独立工作或同其他构件组合起来协调工作的程序体,一经产生,就与它的具体实现语言无关,可以认为是一段二进制码和数据段,其内部具体实现是无法看到的,可将成熟的构件当作商品出售,在保证开发者的利益同时最大地满足社会需求。采用构件来开发软件可以更有效地重用他人已有的劳动成果。
    在复用软件设计中,如何设计和构造可复用的软件是软件设计者首先要面对的问题。根据面向对象的设计原理,应着眼于以下几个方面:
    (1)封装性
    在软构件的定义中,用户只关心事件的输入输出,对事件内部不必关心,方法和事件是独立于应用的,用户可以在软构件中定义自己的事件,对于内部的复杂性调用这并不知晓,从而提高了隐蔽性。
    (2)重载
    重载就是在同一软件构件中用同一名字来表示不同的方法名。一般有两种实现方法,一是方法参数的个数重载,二是方法参数的类型重载。
    (3)继承
    继承就是高层的类在不同范围的复用。
    (4)聚合
    聚合就是把一个难以复用的大软件分成若干部分构件,使其中的某些构件成为可以复用的构件。
    (5)多态性
    多态性指某方法不仅可以处理有相同结构的对象,也可以处理不同结构的对象。
    中间件及相关软件是商业化的软件复用。仅看程序方面,软件复用后的制品也不只包括中间件软件,还包括软件框架、应用框架、通用业务构件等多种可复用形式。
    软件复用(SoftWare Reuse)是将已有软件的各种有关知识用于建立新的软件,以缩减软件开发和维护的花费。软件复用是提高软件生产力和质量的一种重要技术。早期的软件复用主要是代码级复用,被复用的知识专指程序,后来扩大到包括领域知识、开发经验、设计决定、体系结构、需求、设计、代码和文档等一切有关方面。
    展开全文
  • 多路复用

    2020-03-22 23:05:25
    多路复用的意思是这个协议层可以同时支持多个应用,TCP就是多路复用的。 它是通过端口来实现的,一个端口和IP地址组成套接字,就可以标识一个应用。用它来和对应的套接字连接。 TCP层使用端口号来给数据包分类,...

    多路复用

     

    多路复用的意思是这个协议层可以同时支持多个应用,TCP就是多路复用的。

    它是通过端口来实现的,一个端口和IP地址组成套接字,就可以标识一个应用。用它来和对应的套接字连接。

     

    TCP层使用端口号来给数据包分类,可以让对应的数据包找到对应的应用。

    上图显示了TCP的多路复用。

    当一个数据包从IP层到达TCP层是,TCP层查看TCP头中的端口号,找到对应的应用。

    不同的端口号其实就是对应了不同的应用层协议。

     

     

    展开全文
  • 合成复用原则就是在一个新对象里通过关联关系(组合关系、聚合关系)来使用一些已有对象,使之成为新对象一部分;新对象通过委派调用已有对象方法达到复用功能目的。简而言之,尽量使用 组合/聚合 方式...
  • java复用

    2019-09-22 16:02:56
    java复用类英文名叫reusing classes ,重新使用的类,复用的意思就是重复使用的类,其实现方法就是我们平常使用的组合和继承;  1、组合: has-a 的关系 (自我理解:组合就是我们平时新建一个类的对象,然后...

      java复用类英文名叫reusing classes  ,重新使用的类,复用的意思就是重复使用的类,其实现方法就是我们平常使用的组合和继承;

     

      1、组合: has-a 的关系  (自我理解:组合就是我们平时新建一个类的对象,然后使用这个类的各种属性,这就是组合,组合只能够使用其方法,不能够改变方法)

     

      2、继承: is-a 的关系  (自我理解:继承就是一个类去继承另一个类,然后能够使用这个类中的方法和属性,而且能够重写父类中的方法,是接口)

      
      重写:(@Override)  重写是子类方法重新覆盖父类的方法,如果没有重写或者重载,那么子类调用一个子类没有的方法时,其实是调用父类。

          其中@Override注解可以防止在不想重载时而被意外重载。

          重写注意与重载的区别,重载是同一个类中,方法名相同,而方法参数不同,以此区分要调用的方法。

      toString()方法说明:调用一个对象可以给你返回一个字符串,比如System.out.println(object);(object是一个具体的对象)这一句就会调用toString()方法,然后返回

      一个字符串。

      final关键字:加上final关键字的基本类型,表示这个变量初始化后不会改变。类似c的define,你希望一个变量在这个程序里就是这个值不需要改变。就可以用final。

            static本来是静态初始化,和final一起用就是占据了一块不能改变的存储空间。

            final修饰方法时,可以继承,但是不能够修改,就是不能够重写;

            final修饰类是,这个类不能够被继承;

      main()方法说明:我们可以对每一个类都设置一个main()方法,即使一个类嵌套在另一个类中是也是可以的,这样可以使得每个类的单元测试变得更加简便易行。

      

     1 /**
     2  * main()方法说明
     3  * 2016/5/4
     4  **/ 
     5 package cn.Java_7;
     6 
     7 public class Text extends Text_1{
     8 
     9     public static void main(String[] args) {
    10         System.out.println("Text");
    11         Text_1 text_1 = new Text_1();
    12         text_1.main(args);
    13     }
    14 }
    15 
    16 class Text_1{
    17     Text_1(){}
    18     public static void main(String[] args){
    19         System.out.println("Text_1");
    20     }
    21 }
    View Code

        组合继承重写实例:

        

     1 /**
     2  * 复用类  组合和继承
     3  * 2016/5/4
     4  */
     5 package cn.Java_7;
     6 
     7 class Father{
     8     int age;
     9     Father(){
    10         this.age = 50;
    11         System.out.println("Father class:Father.age"+this.age);
    12     }
    13 
    14     public void get(){
    15         System.out.println("Father.get");
    16     }
    17 
    18     public String toString(){
    19         return "Father.toString";
    20     }
    21 }
    22 
    23 //继承
    24 class Son extends Father{
    25     int age;
    26     Son(){
    27         this.age = 20;
    28         System.out.println("Son class:Son.age"+this.age);
    29     }
    30 
    31     @Override
    32     public void get(){
    33         System.out.println("Son.get");
    34     }
    35 
    36     public String toString(){
    37         return "Son.toString";
    38     }
    39 }
    40 
    41 //继承
    42 class GrandSon extends Son{
    43     int age;
    44     GrandSon(int age){
    45         this.age = age;
    46         System.out.println("GrandSon class:GrandSon's age is "+this.age);
    47     }
    48 }
    49 public class Father_Son {
    50     public static void main(String[] args){
    51     //组合语法
    52     Father father = new Father();
    53     System.out.println(father);
    54     father.toString();
    55 
    56     Son son = new Son();
    57     System.out.println(son);
    58     son.toString();
    59 
    60     GrandSon grandson = new GrandSon(4);
    61     System.out.println(grandson);
    62     }
    63 }
    View Code

     

    转载于:https://www.cnblogs.com/snail-lb/p/5460310.html

    展开全文
  • 关于UITableViewCell复用谈谈我一些心得 UITableView是ios开发中使用率极高一个控件,就我个人来说,几乎我做每一个View上都有她...
所谓复用表面意思来理解就是重复利用了。大致工作原理就是:UITabl
  • GPIO复用设置理解

    2020-11-06 16:34:44
    举例GD芯片上USART2的RX引脚为PB10,TX引脚为PB11,PB10和PB11是IO口,复用的意思是这些IO口还可以作为其他外设的引脚,比如PB11可以作为3个外设的引脚,那么PB11的复用功能就有三个,USART2的TX引脚只是PB11的复用...
  • IO多路复用是什么意思,在实际应用中是指什么情况? 以及IO多路复用在一些异步web server中实际应用,就好比nginx是怎样使用epoll来实现异步IO处理,一个请求到来了,nginx使用epoll接收请求过程是怎样.....
  • 从名字可以看出Recycler是可回收复用的意思,recyclerView就是可回收缓存并复用的View,回收缓存的是itemView,复用的是itemView(itemView就是你为每种type写的R.layout.xxx布局,LayoutInflater.inflate()的那个...
  • I/O复用到底是什么意思

    千次阅读 2017-08-18 12:27:01
    问 epoll  网络编程   jql09 2016年03月05日提问 · 2016年03月06日更新 关注 6 关注 收藏 3 收藏,1.4k 浏览 ...UNP网络编程中,有I/O复用的
  • UITableView是ios开发中使用率极高一个...所谓复用表面意思来理解就是重复利用了。大致工作原理就是:UITableView属于lazy loading,也就是只加载会在界面上显示部分。举个例子,比如说UITabeview调试是460,
  • 写在前面:本文整理于知乎...假设你是一个机场空管, 你须要管理到你机场全部航线。 包含进港,出港, 有些航班须要放到停机坪等待,有些航班须要去登机口接乘客。 你会怎么做? 那么问题就来了: 非常快你...
  • IO多路复用及理解

    2021-03-06 16:23:14
    我们可以把标准输入、套接字等都看做 I/O 的一路,多路复用的意思,就是在任何一路 I/O 有“事件”发生的情况下,通知应用程序去处理相应的 I/O 事件, 这样我们的程序,在同一时刻仿佛可以处理多个 I/O 事件。...
  • i/o 多路复用

    2020-02-01 23:52:37
    多路复用的作用是把标准输入,套接字都看作I/O的一路,多路复用的意思,在任何一路有事件发生,通知应用程序去处理相应的I/事件 。 int select(int maxfd,fd_set *readset,fd_set *writeset,fd_set *exceptset,...
  • Linux IO 多路复用理解

    千次阅读 2018-09-08 18:38:24
    1、复用的意思时不用每个进程/线程来操控单独的一个IO,只需一个进程/线程来操控多个IO. 2、内核空间不能直接解引用用户态的指针。 select 与 poll select 传递 fd_set* 的指针,仍然需要将fd_set从用户...
  • select,I/O复用

    2019-12-18 16:33:21
    把标准输入、套接字都看作I/O的一路,多路复用的意思,就是在任何一路有“事件”发生的情况下,通知应用程序去处理相应的I/O。 使用 I/O 复用以后,如果标准输入有数据,立即从标准输入读入数据,通过套接字...
  • 1. 面向/基于复用编程(Programing for/with reuse)面向...以上是软件复用的两种观点,软件复用就是字面上的意思,使用现有的软件组件实现、更新软件系统的过程。复用的优点:降低了开发成本与时间成本。复用的代码...
  • 我们可以把标准输入、套接字等都看做 I/O 的一路,多路复用的意思,就是在任何一路 I/O 有“事件”发生的情况下,通知应用程序去处理相应的 I/O 事件,这样我们的程序就变成了“多面手”,在同一时刻仿佛可以...
  • if name== “main” 的意思(作用)python代码复用

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 974
精华内容 389
关键字:

复用的意思