鱼C论坛

 找回密码
 立即注册
查看: 2838|回复: 6

CPU执行程序的最小单位是什么?

[复制链接]
发表于 2013-11-27 21:04:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
想请教各位一个问题,当CPU已经开始执行一条指令但是还没有执行完,这是有可能被打断去执行其它指令吗?
比如说一个程序(假设运行在单核单线程的单个处理器上)有线程A和线程B,假如线程A已经开始执行了mov eax,ebx,但是还没有执行完,此时线程A有可能被打断去执行线程B的指令吗?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-27 21:36:33 | 显示全部楼层
我表示我也不知,同求答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-27 23:17:25 | 显示全部楼层
我是个门外汉  我个人感觉不行 一条指令应该是最小的吧  你让他执行一般去干别的他估计不愿意:lol:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-28 00:42:51 | 显示全部楼层
不知道呀不知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-28 08:26:13 | 显示全部楼层
我也想知道
:shutup:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-28 13:10:40 | 显示全部楼层
打断的话有内中断和外中断

CPU是轮流执行每个程序一小块时间片,由于CPU速度很快,你感觉不到,以为程序在并行执行,其实也只是快速的轮流执行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-28 16:39:48 | 显示全部楼层
线程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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-28 17:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表