经常在代码里面看到多路复用,那什么是多路复用?

...
ServeMux is an HTTP request multiplexer.
...
type ServeMux struct {
   mu    sync.RWMutex
  m     map[string]muxEntry
  es    []muxEntry // slice of entries sorted from longest to shortest.
  hosts bool // whether any patterns contain hostnames
}

什么样的情况下,才算是多路复用?

九九一十八,一步一个脚印
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 4

IO = INPUT/OUTPUT, 以一个10086客服妹子(一个进程)接待电话来比喻,最开始的电话机,她只能同时接待一个人,而且每次问答都得拨一次号(每次HTTP请求都需要三次握手),后来电话机升级可以保持通话了( keep-alive)这就是所谓的 “IO复用”。

后来客户接待多了,因为她接待一个人的时候,其他人没有办法打进来(10086号码占线),咋办呢?于是 10086 可以分配多个电话分机,其他人也可以拨打10086进来了(非阻塞模式),于是客服妹子忙坏了,她将面临三个问题:

  1. 一个人同时监听多个电话机,怎么知道有新的连接进来?
  2. 一般客服不会主动挂断电话,怎么知道哪些对方已挂断?
  3. 怎么知道哪个电话机的客户在问问题,不会发生没听到的情况?

针对上面的问题,请了一个后台帮手帮助客服,当有新的电话打来、哪些电话对方说话了、哪些电话对方挂断了,把这个电话机交给客服,这个帮手需要快速轮询靠近每个电话机的听筒,帮手(计算机)虽然很快,缺点也存在,电话机经常在用户空间(客服)和内核空间(帮手)不断传递,而且不能有大量的电话机(性能和内存)。这就是最初的 select 模型,最多支持2048个链接,实现了所谓的 “IO多路复用”。

于是升级后的系统,采用事件监听机制,每个电话机的状态都通过事件(I/O流事件)(铃音或者其他)主动报告,这样极大的利用了客服资源(进程)。这就是 epoll模型。

2年前 评论

兄弟发错版块了,应该去go社区问人

2年前 评论
mowangjuanzi 2年前

IO 多路复用技术,你可以理解为一个关卡供多条道路交替使用。

2年前 评论

IO = INPUT/OUTPUT, 以一个10086客服妹子(一个进程)接待电话来比喻,最开始的电话机,她只能同时接待一个人,而且每次问答都得拨一次号(每次HTTP请求都需要三次握手),后来电话机升级可以保持通话了( keep-alive)这就是所谓的 “IO复用”。

后来客户接待多了,因为她接待一个人的时候,其他人没有办法打进来(10086号码占线),咋办呢?于是 10086 可以分配多个电话分机,其他人也可以拨打10086进来了(非阻塞模式),于是客服妹子忙坏了,她将面临三个问题:

  1. 一个人同时监听多个电话机,怎么知道有新的连接进来?
  2. 一般客服不会主动挂断电话,怎么知道哪些对方已挂断?
  3. 怎么知道哪个电话机的客户在问问题,不会发生没听到的情况?

针对上面的问题,请了一个后台帮手帮助客服,当有新的电话打来、哪些电话对方说话了、哪些电话对方挂断了,把这个电话机交给客服,这个帮手需要快速轮询靠近每个电话机的听筒,帮手(计算机)虽然很快,缺点也存在,电话机经常在用户空间(客服)和内核空间(帮手)不断传递,而且不能有大量的电话机(性能和内存)。这就是最初的 select 模型,最多支持2048个链接,实现了所谓的 “IO多路复用”。

于是升级后的系统,采用事件监听机制,每个电话机的状态都通过事件(I/O流事件)(铃音或者其他)主动报告,这样极大的利用了客服资源(进程)。这就是 epoll模型。

2年前 评论
自由与温暖是遥不可及的梦想

看到代码

这不是go的语法嘛

跑到PHP来问

楼上还回答了

看来PHP 转go的还是非常多呀,php不行了嘛

php是世界上最好的语言

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!