经常在代码里面看到多路复用,那什么是多路复用?
...
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
}
什么样的情况下,才算是多路复用?
高认可度评论:
IO = INPUT/OUTPUT, 以一个10086客服妹子(一个进程)接待电话来比喻,最开始的电话机,她只能同时接待一个人,而且每次问答都得拨一次号(每次HTTP请求都需要三次握手),后来电话机升级可以保持通话了( keep-alive)这就是所谓的 “IO复用”。
后来客户接待多了,因为她接待一个人的时候,其他人没有办法打进来(10086号码占线),咋办呢?于是 10086 可以分配多个电话分机,其他人也可以拨打10086进来了(非阻塞模式),于是客服妹子忙坏了,她将面临三个问题:
针对上面的问题,请了一个后台帮手帮助客服,当有新的电话打来、哪些电话对方说话了、哪些电话对方挂断了,把这个电话机交给客服,这个帮手需要快速轮询靠近每个电话机的听筒,帮手(计算机)虽然很快,缺点也存在,电话机经常在用户空间(客服)和内核空间(帮手)不断传递,而且不能有大量的电话机(性能和内存)。这就是最初的
select
模型,最多支持2048个链接,实现了所谓的 “IO多路复用”。于是升级后的系统,采用事件监听机制,每个电话机的状态都通过事件(I/O流事件)(铃音或者其他)主动报告,这样极大的利用了客服资源(进程)。这就是
epoll
模型。兄弟发错版块了,应该去go社区问人
IO 多路复用技术,你可以理解为一个关卡供多条道路交替使用。
IO = INPUT/OUTPUT, 以一个10086客服妹子(一个进程)接待电话来比喻,最开始的电话机,她只能同时接待一个人,而且每次问答都得拨一次号(每次HTTP请求都需要三次握手),后来电话机升级可以保持通话了( keep-alive)这就是所谓的 “IO复用”。
后来客户接待多了,因为她接待一个人的时候,其他人没有办法打进来(10086号码占线),咋办呢?于是 10086 可以分配多个电话分机,其他人也可以拨打10086进来了(非阻塞模式),于是客服妹子忙坏了,她将面临三个问题:
针对上面的问题,请了一个后台帮手帮助客服,当有新的电话打来、哪些电话对方说话了、哪些电话对方挂断了,把这个电话机交给客服,这个帮手需要快速轮询靠近每个电话机的听筒,帮手(计算机)虽然很快,缺点也存在,电话机经常在用户空间(客服)和内核空间(帮手)不断传递,而且不能有大量的电话机(性能和内存)。这就是最初的
select
模型,最多支持2048个链接,实现了所谓的 “IO多路复用”。于是升级后的系统,采用事件监听机制,每个电话机的状态都通过事件(I/O流事件)(铃音或者其他)主动报告,这样极大的利用了客服资源(进程)。这就是
epoll
模型。看到代码
这不是go的语法嘛
跑到PHP来问
楼上还回答了
看来PHP 转go的还是非常多呀,php不行了嘛
不
php是世界上最好的语言