关于 Linux 上同一进程的线程之间的上下文切换成本是否有任何好的经验数据(主要是 x86 和 x86_64)?我说的是一个线程在自愿或非自愿进入睡眠之前在用户空间中执行的最后一条指令与同一进程的不同线程在同一 cpu/核心上唤醒后执行的第一条指令之间的周期数或纳秒数.
我写了一个快速测试程序,它rdtsc
在分配给同一个 cpu/core 的 2 个线程中不断执行,将结果存储在一个 volatile 变量中,并与其姊妹线程的相应 volatile 变量进行比较。第一次检测到姊妹线程的值发生变化时,它会打印差异,然后返回循环。我在 Atom D510 cpu 上以这种方式获得了大约 8900/9600 个周期的最小/中值计数。这个程序是否合理,数字是否可信?
我的目标是估计,在现代系统上,每个连接的线程服务器模型是否可以与选择类型的多路复用竞争甚至胜过选择类型的多路复用。这在理论上似乎是合理的,因为从对 fd 执行 IO 到 fd 的转换X
仅Y
涉及在一个线程中休眠并在另一个线程中唤醒,而不是多个系统调用,但这取决于上下文切换的开销。