在Linux上,同一进程的线程之间进行上下文切换的成本
||
关于在Linux上同一进程的线程之间进行上下文切换的成本,是否有任何好的经验数据(主要是x86和x86_64值得关注)?我说的是一个线程在用户空间中执行的最后一条指令在自愿或非自愿进入睡眠之前执行的最后一个指令之间的周期数或纳秒数,而同一进程的不同线程的第一条指令在同一CPU /上唤醒后执行的周期数或纳秒数核心。
我编写了一个快速测试程序,该程序在分配给同一cpu / core的2个线程中不断执行“ 0”,将结果存储在一个volatile变量中,并与其姊妹线程的相应volatile变量进行比较。第一次检测到姊妹线程的值发生变化时,它将打印差异,然后返回循环。通过这种方式,我在Atom D510 cpu上获得的最小/中位数约为8900/9600个周期。这个程序看起来合理吗,数字似乎可信吗?
我的目标是估计在现代系统上,每连接线程服务器模型是否可以与选择类型的多路复用竞争,甚至胜过选择类型的多路复用。从理论上讲这似乎是合理的,因为从在fd
X
上执行IO到fdY
的过渡仅涉及在一个线程中休眠并在另一个线程中唤醒,而不是多个系统调用,但这取决于上下文切换的开销。
没有找到相关结果
已邀请:
1 个回复
感秆暴壳
到fd
的转换通常会涉及相同的单个系统调用(因为服务器会迭代从单个
返回的活动文件描述符列表)。一个线程也应该比多个线程具有更少的缓存占用空间,只需通过只有一个堆栈即可。我怀疑解决此事的唯一方法(对于“定居点”的某些定义)可能是进行基准枪战...