实时通信系统设计 - 弦外之音

/ 0评 / 0

在 webrtc 的架构中,如果无法打洞,数据包就会通过服务器转发,本文主要分析如何设计多线程架构,更快地转发数据包。先声明,我讲的不一定对。

先讲第一个问题,协程可以提高

流程图如下:

Windows 系统中线程轮转时间也就是时间片大约是20ms,如果某个线程所需要的时间小于20ms,那么不到20ms就会切换到其他线程;如果一个线程所需的时间超过20ms,系统也最多只给20ms,除非意外发生(那可能导致整个系统无响应),而Linux/unix中则是5~800ms。

【路人】Loken(2338195090) 2022/3/23 8:44:49 计算机大部分任务都不需要一直循环计算。例如我现在打字,我打完了。就完事了,我不会一直在打字。所以其实CPU总会停下来。等待外部事件把他激活。

所以CPU就只有两个状态,工作或者暂停。

【路人】Loken(2338195090) 2022/3/23 8:45:40 所以你说得对,百分比实际上是统计概念。

正常CPU执行完指令之后就会停下,等等外部硬件激活,所以CPU实际上没有使用率这个概念,只有工作或者停下两个状态,百分比,是操作系统搞出来的东西,50%代表系统流畅,在各个任务可以轻松切换,因为CPU很快,20毫秒左右人类察觉不出来。

100%代表操作系统任务繁重,已经无法顺利切换,人类会感受到卡顿。

但是对于实时通信,20毫秒还是比较关键的。尽量减少指令执行,就可以降低实时通信的延迟。虽然CPU使用率看着不高,但是实时性是无法通过CPU使用率看出来的。


由于笔者的水平有限,文中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果读者有任何宝贵意见,可以加我微信 Loken1。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注