Win32多线程之线程上下文切换(Context Switching)

    在一个抢先式多任务系统中,操作系统小心地确保每一个线程都有机会执行。他依赖硬件的协助以及许多的簿记工作。当硬件计时器认为某个线程已经执行够久了,就会发出一个中断,于是CPU取得目前这个线程的当前状态,即把所有寄存器的内容拷贝到堆栈之中,再把它从堆栈拷贝到一个CONTEXT结构(这样便储存了线程的状态)中,以备以后在用。

     要切换不谈的线程,操作系统应先切换该线程所隶属的进程的内存(即page directory 和 page  tables),然后恢复该线程放在CONTEXT结构中的寄存器值,这整个过程便称为

Context Switch。

    如果第二个线程属于不同进程所有,则这两个进程没有办法共享任何内存。这种隔离策略可以保护进程免受其他人突如其来的伤害,最诡异的是两个进程以为他们在相同的地址上运行,两个进程的相同指针实际上指向不同的实际内存。因此,不同进程间的线程如果要通讯,唯有依赖别的设计,使之拥有共享内存(shared memory)。如果两个线程属于同一个进程,他们将共享所有的内存。

    Context Switch可能在一秒钟之内发生数百次,这样快速的切换给你造成电脑在同一时间做了许多事情的错觉。

    Context Switch的效率:每一次Context Switch都要缴点效率税金,如果你的程序有500个线程,你要缴的税就多些。

     两个线程同时做同一件事情所花费的时间之和比一个线程接连做两次一样的事情所花费的时间长一点。

    从用户的观点来看,抢先式多任务使电脑看起来能够同时处理许多任务。而实际上CPU一次只能做一件事情。当然,你也可能买一部多CPU的电脑。CPU越多,就有越多线程可以同时执行,不需要Context Switch。

   

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值