精华内容
下载资源
问答
  • 2022-03-04 10:51:55

    I/O多路复用,我觉得其实是一种机制,相比于之前的多进程,多线程来处理连接请求后的相关操作,I/O多路复用则可以一个进程或者一个线程去完成对这些I/O请求的操作,使得内核一旦发现进程指定的一个或多个IO条件就绪,它就通知进程。
    它的优点就是:与多进程和多线程技术相比,I/O多路复用技术的最大优势是系统开销小,系统不必创建进程/线程,也不必维护这些进程/线程,从而大大减小了系统的开销。

    IO复用应用的场合:

    (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。

    (2)当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。

    (3)如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用到I/O复用。

    (4)如果一个服务器即要处理TCP,又要处理UDP,一般要使用I/O复用。

    (5)如果一个服务器要处理多个服务或多个协议,一般要使用I/O复用。

    更多相关内容
  • IO 多路复用什么意思

    千次阅读 2019-01-03 00:36:26
    1 IO 多路复用什么意思? - 罗志宇的回答 - 知乎 https://www.zhihu.com/question/32163005/answer/55772739 这个还是很好说清楚的。 假设你是一个机场的空管, 你需要管理到你机场的所有的航线, 包括进港,...

    转自: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在不在池里面。

     

    笔者菠萝关于多线程和io多路复用的一点看法

    见下篇

    展开全文
  • wrapper不能复用是指: // ① 使用乐观锁时不能加多条件查询 wrapper.eq("name",zhangsan); wrapper.eq("sex",man); xxxService.update(person,wrapper); // ② wrapper 不能作为参数执行 两次 对数据库的操作 ...
  • 横轴Dead connections 就是链接数的意思,叫这个名字只是它的测试工具叫deadcon. 纵轴是每秒处理请求的数量,你可以看到,epoll每秒处理请求的数量基本不会随着链接变多而下降的。poll 和/dev/poll 就很惨了。 ...
    著作权归作者所有。
    商业转载请联系作者获得授权,非商业转载请注明出处。
    作者:罗志宇
    链接:http://www.zhihu.com/question/32163005/answer/55772739
    来源:知乎

    这个还是很好说清楚的。

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

    你会怎么做?

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

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

    现实上我们的空管同时管几十架飞机稀松平常的事情, 他们怎么做的呢?
    他们用这个东西
    <img src="https://pic2.zhimg.com/583d5ba3cee12e78befa8e2b749f4269_b.jpg" data-rawwidth="550" data-rawheight="534" class="origin_image zh-lightbox-thumb" width="550" data-original="https://pic2.zhimg.com/583d5ba3cee12e78befa8e2b749f4269_r.jpg">这个东西叫flight progress strip. 每一个块代表一个航班,不同的槽代表不同的状态,然后一个空管员可以管理一组这样的块(一组航班),而他的工作,就是在航班信息有新的更新的时候,把对应的块放到不同的槽子里面。 这个东西叫flight progress strip. 每一个块代表一个航班,不同的槽代表不同的状态,然后一个空管员可以管理一组这样的块(一组航班),而他的工作,就是在航班信息有新的更新的时候,把对应的块放到不同的槽子里面。

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

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

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

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


    其实“I/O多路复用”这个坑爹翻译可能是这个概念在中文里面如此难理解的原因。所谓的I/O多路复用在英文中其实叫 I/O multiplexing. 如果你搜索multiplexing啥意思,基本上都会出这个图:
    <img src="https://pic1.zhimg.com/5d8e39d83e931da6ba3b6bc496302e5c_b.png" data-rawwidth="250" data-rawheight="177" class="content_image" width="250"> 于是大部分人都直接联想到"一根网线,多个sock复用" 这个概念,包括上面的几个回答, 其实不管你用多进程还是I/O多路复用, 网线都只有一根好伐。多个Sock复用一根网线这个功能是在内核+驱动层实现的

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

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

    <img src="https://pic2.zhimg.com/18d8525aceddb840ea4c131002716221_b.jpg" data-rawwidth="400" data-rawheight="119" class="content_image" width="400">
    在同一个线程里面, 通过拨开关的方式,来同时传输多个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

    贴一张霸气的图,看看当年神一样的性能(测试代码都是死链了, 如果有人可以刨坟找出来,可以研究下细节怎么测的).
    <img src="https://pic1.zhimg.com/5a56c4677da1c10153ed22a3f6dfeab4_b.png" data-rawwidth="640" data-rawheight="480" class="origin_image zh-lightbox-thumb" width="640" data-original="https://pic1.zhimg.com/5a56c4677da1c10153ed22a3f6dfeab4_r.png">
    横轴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复用到底是什么意思

    千次阅读 2017-08-18 12:27:01
    问 epoll  网络编程   jql09 2016年03月05日提问 · 2016年03月06日更新 关注 6 关注 收藏 3 收藏,1.4k 浏览 ...UNP网络编程中,有I/O复用


     
    jql09 2016年03月05日提问
    0

    UNP网络编程中,有I/O复用的使用,以select和epoll为例,
    其中有以下说明:
    IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合:

      (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。

      (2)当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。

      (3)如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用到I/O复用。

      (4)如果一个服务器即要处理TCP,又要处理UDP,一般要使用I/O复用。

      (5)如果一个服务器要处理多个服务或多个协议,一般要使用I/O复用。

      与多进程和多线程技术相比,I/O多路复用技术的最大优势是系统开销小,系统不必创建进程/线程,也不必维护这些进程/线程,从而大大减小了系统的开销。

    我的理解:假设现在已经有10000个客户端和服务器通过TCP三次握手,处于已连接状态,也就是有10000个connected_socket,当这10000客户端同时发送数据请求时,服务器通过使用select或者epoll可以同时处理这10000个请求,请问我理解的IO复用对吗?

    如果是的话,假设10000个客户端同时发送文件下载的请求,不还是要创建多个进程/线程来处理下载请求吗,否则,一个个的处理,最后一个客户端的文件下载请求要很长时间才能完成啊,怎么就不必创建多个进程/线程

    查看全部 3 个回答

    2

    如果没有io复用, 一个线程同时只等待一个fd. 为了同时等待很多fd就需要有很多线程, 这导致不小的线程切换开销.

    复用(select/epoll)是说你可以用少量线程同时在很多fd上等待

    推荐答案

    1

    已采纳

    最近刚好写过一篇文章:I/O多路复用和Socket

    个人觉得,IO复用的本质是在内核级别对fd进行轮询,哪个准备好了就通知用户代码,这么做最优。如果没有IO复用的话,你需要自己去轮询哪个fd准备好了,亦或者再次一点,一个线程阻塞等待一个fd

    看了你画的图,我再补充一点。IO复用只在fd是否就绪这个问题上帮助用户代码,所谓就绪包括有下载请求到来。但是真正处理下载(即像客户端发送数据),是由用户自己的工作线程去处理的,如果同时请求量很大,超过了单机的处理能力,那么用户需要自己设计排队或者分流机制,这跟用不用IO复用没有关系。

    展开全文
  • 首先,多路复用(multiplexing) 是计算机里面很常见的一个概念,我觉得他的核心思想就是利用一组资源做很多件事。 常见的多路复用(multiplexing)除了网络编程里面的IO多路复用;还有计算机网络的时分多路复用,频分多...
  • 什么是IO多路复用?怎么实现?

    千次阅读 2021-10-17 15:56:19
    IO多路复用(IO Multiplexing)是指单个进程/线程就可以同时处理多个IO请求。 实现原理:用户将想要监视的文件描述符(File Descriptor)添加到select/poll/epoll函数中,由内核监视,函数阻塞。一旦有文件描述符...
  • 什么是IO多路复用,理解IO多路复用

    千次阅读 多人点赞 2020-04-03 12:18:00
    一、什么是socket? 我们都知道unix(like)世界里,一切皆文件,而文件是什么呢?文件就是一串二进制流而已,不管socket,还是FIFO、管道、终端,对我们来说,一切都是文件,一切都是流。在信息 交换的过程中,我们都...
  • 代码复用

    2021-08-17 17:28:36
    一、代码复用与函数递归 1.代码复用与模块化设计 (把代码当成资源进行抽象) -代码资源化:程序代码是一种用来表达计算的“资源” -代码抽象化:使用函数等方法对代码赋予更高级别的定义 -代码复用:同一份代码在需要...
  • 什么是I/O多路复用

    2021-01-23 17:16:10
    IO多路复用什么? 回答: I/O多路复用,我觉得其实是一种机制,相比于之前的多进程,多线程来处理连接请求后的相关操作,I/O多路复用则可以一个进程或者一个线程去完成对这些I/O请求的操作,使得内核一旦发现进程...
  • 什么叫做引脚复用

    万次阅读 2019-02-25 14:08:03
    问:什么叫做引脚复用? 答:STM32芯片内部有很多外设,这些外设的引脚都是与IO口复用的。也就是说,一个IO口如果可以复用为内置外设的功能引脚,那么当这个IO口作为内外设使用的时候,就叫做复用。 ...
  • Linux IO 多路复用什么意思

    千次阅读 2016-04-10 16:56:59
    于是大部分人都直接联想到”一根网线,多个sock复用” 这个概念,包括上面的几个回答, 其实不管你用多进程还是I/O多路复用, 网线都只有一根好伐。多个Sock复用一根网线这个功能是在内核+驱动层实现的。 重要...
  • 软件复用什么意思

    千次阅读 2007-05-31 20:58:00
    软件复用是将已有的软件及其有效成分用于构造新的软件或系统。它不仅是对软件程序的复用,还包括对软件生产过程中其它劳动成果的复用,如项目计划书、可行性报告、需求分析、概要设计、详细设计、编码(源程序)、测试...
  • 组件的复用

    2022-01-12 13:50:18
    1、组件的复用 父子组件传递数据 父组件传给子组件要prop 子组件传给父组件要emit 在有些情况下,我们需要对一个 prop 进行“双向绑定”。官方推荐以update:my-prop-name 的模式触发事件(因为以真正的双向绑定方式会...
  • 复用

    千次阅读 2020-05-28 14:34:31
    什么是复用性(What)二.为什么要提高复用性(Why)三.如何提高复用性(How)1.继承2.委托 一.什么是复用性(What) 复用性即可以多次使用的特性。对于代码来说复用性就是一种框架式结构,通过高度的抽象,让你的代码能适应...
  • Java基础学习——代码的复用。通过代码复用可以使项目代码更加精炼
  • 在发送方主机多路复用 { 从多个套接字接收来自多个进程的报文,根据套接字对应的IP地址和端口号等信息对报文段用头部加以封装(该头部信息用于以后的解复用) 在接收端,运输层检查这些字段并标识出接收套接字,进而将...
  • 文章来源:刚接触STM32F103,在尝试编写“按键中断”和“PWM呼吸灯”程序的时候,发现例程都用到了管脚复用AFIO://打开管脚复用AFIORCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);12写到“232USART串口通信...
  • FFmpeg解复用

    2020-02-29 21:33:11
    复用是多媒体开发中核心的功能。解复用功能是从音视频信号源中分流出不同的音频和视频流;另外解复用一般属于一种主动操作,即从音视频信号源中取出。 数据流结构为Source->Demux->Stream 主要实现模式有...
  • 复用就是读取本地文件或网络流,将解封装后的音频和视频数据分别保存到缓存队列中 解复用的一般流程如下: 1.avformat_open_input int avformat_open_input(AVFormatContext **ps, const char *url, ...
  • 关于Vue的就地复用

    千次阅读 2019-08-08 16:58:46
    关于Vue的就地复用 这是第一次使用博客,就是想来记录一下自己碰到的一些问题以及解决方法,各位看官随意。 之前做项目的时候,要求对elementui的表格做拖拽排序,拖拽要做成只能通过拖拽最后一列的标记才能够拖动...
  • STM32端口复用

    2021-01-31 21:35:25
    1.什么是端口的复用? stm32中的许多内置外设,这些外设的外置引脚都是和GPIO共用同一个端口,一个GPIO口如果可以作为某个内置外设的引脚,那么当GPIO 口作为内置外设的引脚使用时,就叫做端口的复用。 例如:串口1...
  • 对IO多路复用的理解

    2021-07-09 16:35:18
    一、概念 IO多路复用是一种同步机制,通过复用机制实现一个线程监视多个文件句柄,一旦某个文件句柄准备就续,就通知应用程序对文件读写操作。若没有文件句柄就续时会阻塞应用程序,交出cpu。多路是指网络连接,复用...
  • 端口复用

    千次阅读 2019-06-19 15:30:38
    端口复用真正的用处主要在于服务器编程:当服务器需要重启时,经常会碰到端口尚未完全关闭的情况,这时如果不设置端口复用,则无法完成绑定,因为端口还处于被别的套接口绑定的状态之中。 2.SO_REUSEADDR的作用 ...
  • 术语 容器( ...复用/解复用(mux/demux) 把不同的流按照某种容器的规则放入容器,这种行为叫做复用(mux) 把不同的流从某种容器中解析出来,这种行为叫做解复用(demux)  
  • 端口复用解释说明

    千次阅读 2018-09-10 21:21:17
    什么要有这个端口复用呢 因为在服务端结束后,也就是第三次挥手的时候会有个等待释放时间,这个时间段大概是1-4分钟, 在这个时间内,端口不会迅速的被释放,所以可通过端口复用的方法来解决这个问题 sock :...
  • 1、问题:什么叫端口复用? 回答:一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用。 简而言之:把IO口当做内置外设的功能引脚时就叫端口复用 举例: 例如串口1 的...
  • socket 端口复用

    千次阅读 2019-05-22 23:14:19
    TCP协议规定,主动关闭连接的一方处于TIME_WAIT状态,等待两个MSL的时间后才能回到CLOSED...端口复用 在server的TCP连接没有完全断开之前不允许重新监听是不合理的。因为TCP连接没有完全断开指的是connfd(127.0.0.1:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 108,697
精华内容 43,478
关键字:

复用是什么意思