[sofa]//TODO mosn源码-无损迁移

1.什么是无损迁移

平滑升级的本质就是 listener fd 的迁移.

那什么是fd,为什么fd不能直接传给进程呢?fd是针对进程的,fd只是一个数字,但是同样的数字对不同的进程有不同的意义.因此两个进程想同时监听同一个fd,有两种方法

1.新老进程是父子关系.

不知道是否有疑问.

两个进程同时监听一个端口,会发生什么

本质上,每个进程都会有一个打开文件的列表(lsof -p),每个打开的文件都会有一个文件描述符(ll proc/进程id/fd),fd代表了一个进程打开的某个特定文件.如图.socket也是一个文件(linux 万物皆文件).每个socket关联两个sk_buffer的队列,代表着收发队列.可以参考我之前的博客.(socket底层结构).

那么,有一个新连接后,如果两个进程都在accept,那么会把这个连接给哪个进程呢?当然是一视同仁,都告诉他们,但这样会导致惊群效应.还好现在的内核已经解决该问题了。多个进程都阻塞在对同一个socket的accept调用上时,当有一个新的连接到来,内核只会唤醒一个进程,其他进程保持休眠,压根就不会被唤醒.

2.通过sendfile来传递fd.

mosn中的无损迁移即通过sendMsg/recvMsg系统调用来搞的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值