高性能服务端系列:处理器篇
|
我们知道CPU的核数量是有限的,一般是1-32核不等,而现代操作系统是多任务操作系统,同一时刻在运行的进程数量一般都会远远超过CPU的核数量。简单的说就是并行运行的任务数量最多就是CPU的核数,但是并发运行的任务数量可以有很多。打个比方,对于单核的CPU,如果不能并发运行多个任务的话,那么所有任务都会是串行的,假设某个任务进行一次远程调用,而远程调用的时间比较长,那么这样的系统效率将会非常低,如果能并发执行的话,在一个任务等待的时候,操作系统可以把CPU时间片分给其它其它任务运行,而前一个任务等待完毕后,操作系统再次调度CPU,重新让它继续运行,这样对于使用者来说,感觉就像是同时在运行多个任务。 context switch的开销 保存和恢复context 那是不是并发运行的任务越多越好呢?答案当然是否定的,并发运行任务带来的最大的缺点就是上下文切换(context switch)带来的开销。上下文(context)指的是当前任务运行时,在CPU寄存器,程序计数器中保存的状态。每一次进行线程切换时,需要保存当前所有寄存器、程序计数器、栈指针等,等线程切换回来的时候又要对这些内容进行恢复。 污染CPU缓存 当频繁的进行线程切换的时候,因为运行的任务不一样了,对应的CPU cache中的数据也不一样,当被阻塞的线程重新执行的时候,CPU cache中的内容很可能已经发生了变化,以前在缓存中的数据可能要重新从主存中加载。 因此,在系统设计的时候,应该尽量避免不必要的上下文切换。比如nodejs、golang、actor model、netty等等这些并发模型,都减少了不必要的上下文切换。 关于阿里百川 阿里百川(baichuan.taobao.com)是阿里巴巴集团“云”+“端”的核心战略是阿里巴巴集团无线开放平台,基于世界级的后端服务和成熟的商业组件,通过“技术、商业及大数据”的开放,为移动创业者提供可快速搭建App、商业化APP并提升用户体验的解决方案;同时提供多元化的创业服务-物理空间、孵化运营、创业投资等,为移动创业者提供全面保障。 注:相关网站建设技巧阅读请移步到建站教程频道。 (编辑:PHP编程网 - 湛江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


