CPU执行程序的最小单位是什么?
想请教各位一个问题,当CPU已经开始执行一条指令但是还没有执行完,这是有可能被打断去执行其它指令吗?比如说一个程序(假设运行在单核单线程的单个处理器上)有线程A和线程B,假如线程A已经开始执行了mov eax,ebx,但是还没有执行完,此时线程A有可能被打断去执行线程B的指令吗?
我表示我也不知,同求答案 我是个门外汉我个人感觉不行 一条指令应该是最小的吧你让他执行一般去干别的他估计不愿意:lol: 不知道呀不知道 我也想知道
:shutup: 打断的话有内中断和外中断
CPU是轮流执行每个程序一小块时间片,由于CPU速度很快,你感觉不到,以为程序在并行执行,其实也只是快速的轮流执行。 线程a可能被阻塞(也就是你说的打断),然后执行线程b,给你个简单的例子
public class Ex_3 implements Runnable {
String threadName;
public Ex_3(String threadName)
{
System.out.println(threadName);
this.threadName = threadName;
}
public void run()
{
for(int i = 0 ; i < 3 ; ++i)
{
System.out.println("正在运行的线程:"+threadName);
try
{
Thread.sleep((int)Math.random()*1000);
}
catch(Exception ex)
{
System.out.println(ex);
}
}
}
public static void main(String[] args)
{
System.out.println("开始运行主函数");
Ex_3 t1 = new Ex_3("first");
Ex_3 t2 = new Ex_3("second");
Thread tt1 = new Thread(t1);//线程1
Thread tt2 = new Thread(t2);//线程2
tt1.start();//线程1启动
tt2.start();//线程2启动
System.out.println("主函数结束");
}
}
这段程序的两次运行结果:
(1)。开始运行主函数
first
second
主函数结束
正在运行的线程:first
正在运行的线程:first
正在运行的线程:first
正在运行的线程:second
正在运行的线程:second
正在运行的线程:second
(2)。开始运行主函数
first
second
主函数结束
正在运行的线程:second
正在运行的线程:first
正在运行的线程:second
正在运行的线程:first
正在运行的线程:second
正在运行的线程:first
页:
[1]