假设我有两个线程正在运行,每个线程都有一个for循环,调度器是否有可能从thread1转换到thread2而thread1处于for循环中的迭代中间?所以让我们说for循环正在运行第n次迭代,而在其中间,调度程序调度另一个线程。这可能吗?
答案 0 :(得分:0)
当然是。调度程序可以随时切换线程。
答案 1 :(得分:0)
调度程序是否可以从thread1转换为thread2 而thread1在for循环中处于迭代的中间?
假设您在支持pre-emptive multitasking(1)的操作系统上运行程序,是的。特别是,操作系统的调度程序将设置一个定时器,每个量程触发一次中断(量程通常在5-10毫秒的范围内),并且当调用中断例程时,它将决定是否继续运行当前线程或切换到其他线程。这使得计算机可以同时进行多个操作,即使在单核CPU上也是如此。
请注意,有(并且可能仍然是)操作系统(例如classic Macintosh OS)没有先发制人的多任务处理;在为该操作系统编写程序时,您必须小心谨慎地每隔一段时间显式调用WaitNextEvent(),否则不会允许其他程序执行。这使得编写对时间敏感的程序(如mp3播放器)变得困难,并且还意味着单个写得不好的程序很容易冻结计算机(需要重启电源循环),只需进入一个不包含的无限循环即可。对WaitNextEvent()的调用。
(1)也就是说,几乎所有面向消费者的现代操作系统