关于   小悟志   栏目   标签   文章   归档   友链

   云上小悟  +  

当前位置 : 首页 » InfoTech » 程序运行的特点 正文

程序运行的特点

InfoTech / by: 麦新杰 / 发布:2017年7月2日 / 12次阅读 / 暂无评论
标签:计算机   / 最后修改时间: 2017-07-07 17:02:37

InfoTech / 2017年7月2日 / 12次阅读 / 标签:计算机  

拍拍贷
featured image

程序运行时,有一些共有的特点,这些特点其实非常重要,许多CPU和操作系统的技术设计都是基于这些特点。

 

1, 程序运行的局部性;

在程序运行时,在某一个时间段内,程序运行所需要的代码和数据在一个很小的地址范围之内。

CPU内的高速缓存之所以能够发挥效果,就是基于程序运行的局部性。将程序当前运行的代码所在的那个区域复制到cache中,后面一段的运行就不用访问内存(访问内存相对于访问cache和寄存器还是相当地慢),程序运行加快;不访问内存带来的另外的一个好处是,CPU不去抢系统总线,让其它任务去使用系统总线,比如DMA任务。

要让CPU的高速缓存发挥效果,编程的时候要注意一个细节,比如有一个二维数据a[b][c],我们在循环使用数组元素的时候,要从c这个维度做累加遍历,而不要从b这个维度来累加遍历,因为在内存中,b维度的地址空间跳变很大,很可能会让CPU的cache失效,即不能命中cache。

2, 程序主流程涉及代码很少,但执行频率很高;

有资料说,程序主流程涉及代码只占整个程序的10%,但是90%的时间都在执行这段代码。不确定这个比例是否符合一般规律,至少这个事实的成立的。另外90%的代码都是用来处理各种异常,只是很少被执行到。

程序运行的这个特点,对JIT编译技术有影响,JIT编译器只需要在动态编译的时候,判断出哪段代码是那10%,然后将其编译为机器码并保存。

内存的分页技术和虚拟内存技术也能够很好的跟程序运行的这个特点匹配。操作系统可以只将程序中那10%的代码放入内存,节省内存空间,将剩下的不经常运行到的代码流程交换到硬盘,在需要的时候再交换进内存即可。

动态加载(Dynamic Loading)技术也与此特点有关,只需将程序主要运行的部分加载入内存,节约内存空间,其它如异常处理部分,只在需要的时候,再loading进入内存。动态加载技术是程序自己控制的,跟动态链接(Dynamic Linking)技术有相似的地方,但也有不同。动态链接是在运行时链接(链接是把多个不同的程序段合并起来),一般应用于操作系统提供的公共库,可以让多个程序使用内存中一个公共库,也能起到节约内存的作用。动态链接需要操作系统来提供支持。

(对于动态加载,在构建程序的时候,要有意识的将部分非主流程的代码做成子程序,比如windows下的dll,linux下的so,这样才能享受到动态加载带来的好处;如果没有意识到这样对程序的构建,OS可能会将整个程序放入内存执行。现代OS更加智能,虚拟内存技术可以让程序的一部分进入内存,这在内存很小而程序很大的时候很有用,否则程序就无法被执行了。)

3, 程序一般分IO密集型和CPU密集型;

IO密集型(IO bound)的程序就是IO操作很多,CPU密集型(CPU bound)的程序就是CPU操作很多。

运行中的程序叫做进程,一个进程,要么在使用CPU,要么在等待IO,所以,在讨论CPU调度算法的时候,我们会关心进程的CPU区间和IO区间。

CPU调度的时候,一般都是给IO密集型进程更高的优先级,让他们先运行,因为他们IO操作频繁,而IO操作相对于CPU来说,又非常缓慢,所以,IO密集型程序大部分时间都在等待IO。这些等待的间隙,CPU调用就用来运行CPU密集型的程序。这样的组合,可以有效提高CPU的利用率。(AI时代,CPU密集型的任务通常都是GPU在承担。)

-- (*^-^*) --

本文链接:http://www.maixj.net/ict/chengxu-tedian-15875
云上小悟 麦新杰(QQ:1093023102)

《程序运行的特点》暂无评论

电子邮件地址不会被公开。 必填项已用*标注


前一篇:
后一篇:

云上小悟独立博客网站文章内容,除非特别注明,全部都是原创(非原创请阅读本站版权声明),如需转载,请保留文章链接!原创文章更具个性,有些文字虽略显随意,但不影响个人思想表达。部分文章是我自己的笔记,为自己记录,总结和收藏,同时也分享给您!这是本博建设的出发点,希望您喜欢并得到您的支持!

©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有  备案号:苏ICP备14045477号-1  economists.cn的备案号:苏ICP备14045477号-3  
    联系我们

云上小悟,麦新杰的独立博客
网站二维码