加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 湛江站长网 (https://www.0759zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

高性能服务端系列:处理器篇

发布时间:2016-04-14 15:52:42 所属栏目:建站 来源:阿里百川专区的网站
导读:从JMM说起,作为一名JAVA开发,特别在多线程编程实践中,了解和熟悉JAVA内存模型是很有必要的。刚开始接触内存模型的时候,有很多概念非常陌生,比如happens-before,可见

我们知道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编程网 - 湛江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!