CPU的上下文切换

在高性能编程时,经常接触到多线程,起初总以为多线程并行执行总比单线程要快,然而实际情况是,多线程之间需要竞争IO设备,或者竞争锁资源,导致往往执行速度比不上单线程,那为什么要用多线程呢?这里稍微讲讲

用多线程有几个好处

1.在多核CPU上使用多线程能提高资源利用率

2.多线程时模块化的编程模型,在单线程中如果在一个耗时较长的任务上卡住,那后面都别动了,这就很尴尬。多线程可以将程序分成几个功能相对独立的模块,单独分配一个线程去处理这个耗时长的任务

3.多线程相对于多进程有几个好处,一个是线程的启动切换相比进程小得多。另一个就是线程之间也可以共享信息,相比之下进程间通信则需要专门的消息传递机制

言归正传,多线程经常提及的一个概念就是上下文切换(Context Switch)。它的精确定义可以参考:http://www.linfo.org/context_switch.html 。多任务系统往往需要同时执行多项任务,任务数大于CPU数量时,如何让用户感觉这些任务在同时进行呢?操作系统的设计者利用了时间片轮转的方式,CPU给每个任务一定的时间,时间片时间用完的时候,就把当前任务的状态保存下来,在加载下一任务的状态后,继续服务下一个任务。任务的状态保存及再加载,这段过程就叫上下文切换。

对于我们经常使用的抢占式操作系统来说,引起上下文切换的原因大概有一下几种:1.当前执行任务的时间片用完,CPU正常调度下一任务2.当前执行任务碰到IO阻塞,调度器挂起此任务,执行下一任务3.多个任务抢夺锁资源,当前任务没抢到,被调度器挂起4.用户代码挂起当前任务5硬件终端。总的来说就是各种原因引起的当前任务的切换

猜你喜欢

转载自xiaoxiaoher.iteye.com/blog/2361947