【发布时间】:2014-01-19 09:14:34
【问题描述】:
我想知道在我的操作系统上进行上下文切换需要多长时间。有没有办法做到这一点?我可以用 Java 来做,还是需要本机代码(例如 C 语言)?不同线程的上下文切换是否不同?
【问题讨论】:
-
你的意思是CPU从执行用户代码到执行内核代码需要多长时间?或者调度程序多久从一项任务切换到另一项?或者操作系统暂停一个任务并重新运行其运行队列中的下一个任务需要多少时间?
-
@mcleod_ideafix 我的意思绝对是最后一个“操作系统挂起任务并重新运行其运行队列中的下一个任务需要多少时间?”因为是程序看到的有效时间!
-
这个盒子是否超载,即。它有比核心更多的就绪线程吗?新线程是否在不同的进程中?需要重新加载多少缓存?如果盒子是安静的、相同的进程并且没有缓存加载,则通过发出信号来运行另一个线程,这在我的 Vista 盒子上大约需要 5-7 微秒。其他常见情况需要更长的时间。
-
@MartinJames 所以你的意思是没有这样的代码可以做到这一点,我只能使用 10 微秒作为经验法则!
-
嗯,这就是我的盒子上那个场景需要多长时间 - 这是我唯一计时的。由驱动程序准备好的线程显然需要更长的时间,因为驱动程序必须首先运行它的代码。由于内核间硬件信号,通过抢占运行在不同内核上的另一个线程来运行的线程将花费更长的时间。这一切都有些不同。
标签: java c multithreading operating-system context-switch