看下面的参考.

--------------------------------------------------------------------------------
多核与多线程技术的区别到底在哪里?

毫无疑问的,“多核”、“多线程”此二词已快成为当今处理器架构设计中的两大显学,如同历史战国时代以“儒”、“墨”两大派的显学,只不过当年两大治世思想学派是争得你死我亡,而多核、多线程则是相互兼容并蓄,今日几乎任何处理器都朝同时具有多核多线程的路线发展迈进。

虽然两词到处可见,但可有人知此二者的实际差异?在执行设计时又是以何者为重?到底是该多核优先还是多线程提前?关于此似乎大家都想进一步了解,本文以下试图对此进行个中差异的解说,并尽可能在不涉及实际复杂细节的情形下,让各位对两者的机制观念与差别性有所理解。

行程早于线程.若依据信息技术的发展历程,在软件程序执行时的再细分、再切割的小型化单位上,先是有行程(Process),之后才有线程(Thread),线程的单位比行程更小,一个行程内可以有多个线程,在一个行程下的各线程,都是共享同一个行程所建立的内存寻址资源及内存管理机制,包括执行权阶、内存空间、堆栈位置等,除此之外各个线程自身仅拥有少许因为执行之需的变量自属性,其余都依据与遵行行程所设立的规定。

相对的,程序与程序之间所用的就是不同的内存设定,包括分页、分段等起始地址的不同,执行权阶的不同,堆栈深度的不同等,一颗处理器若执行了A行程后要改去执行B行程,对此必须进行内存管理组态的搬迁、变更,而这个搬迁若是在处理器内还好,若是在高速缓存甚至是系统主存储器时,此种切换、转移程序对执行效能的损伤就非常大,因为完成搬迁、切换程序的相同时间,处理器早就可以执行数十到上千个指令。

两种路线的加速思维.所以,想避免此种切换的效率损耗,可以从两种角度去思考,第一种思考就是扩大到整体运算系统的层面来解决,在一部计算机内设计、配置更多颗的处理器,然后由同一个操作系统同时掌控及管理多颗处理器,并将要执行的程序的各个程序,一个程序喂(也称:发派)给一颗处理器去执行,如此多颗同时执行,每颗处理器执行一个程序,如此就可以加快整体的执行效率。

当然!这种加速方式必须有一个先决条件,即是操作系统在编译时就必须能管控、发挥及运用多行程技术,倘若以单行程的系统组态来编译,那么操作系统就无法管控服务器内一颗以上的处理器,如此就不用去谈论由操作系统负责让应用程序的程序进行同时的多颗同时性的执行派送。

即便操作系统支持多程序,而应用程序若依旧只支持单程序,那情形一样是白搭,操作系统无法对单行程程序再行拆分,依然是只喂入单一颗处理器上去执行,无从加速。

同时用多颗处理器来执行,且每颗处理器执行一个行程,这是一种加速法,另一种加速法则是:尽量不进行内存管理组态的切换,避免切换的效能折损,线程正是在此概念下所出现的产物。

不过,线程也要程序的搭配才能发挥,线程的概念出现与落实已是“C++看消、Java看长”的阶段,所以C++只能通过API呼用的方式来支持与使用多线程,如此必须改写过往的程序才行,改写成有呼用到支持多线程的API才行。相对的,较C++晚问世的Java则是原生支持多线程,不用改写也能发挥及运用多线程的特性及其加速效益。

有了线程后,执行的分割、切割更加细腻,线程机制不仅在多颗处理器的系统内可以加速,在单颗处理器内也一样能获得好处,在多颗处理器的系统上每颗处理器不仅可以单独执行一个程序,当然也可以单独执行一个线程,而在单处理器系统上因为省去内存管理组态的搬迁,所以一样可以加速,很明显的,线程使执行的发派、分配更加细腻与灵活化。

线程的副作用.线程虽有好用的优点,不过它也有副作用的缺点,且此一优缺是一体两面无从分割,缺点是各个线程共享同一组内存管理组态及机制,倘若有一个线程的执行发生错误、瑕疵、或遭入侵等,其余在同一个行程内的每个线程也都会遭受影响、波及,最严重是同一个行程内的一切都错乱、毁坏,由此可知:线程其实是带有若干安全性牺牲的加速法。

此外有人会误会,就字面上而言,多核表示同时间有多颗处理器在执行,每颗处理器可以执行一个行程或一个线程,但是一颗具有多线程能力的处理器并不表示它可以同时执行多个线程,事实上在同一时间内一颗具多线程功效的处理器也依然是执行一个线程而已,只是多线程处理器的内部可以将原有线程的相关信息及变量暂时搁摆,然后去执行其它的线程,执行完后在切换回原来执行到一半的线程,甚至没执行完也可以切换回来,且整个切换过程都在处理器内进行,不用与快取与内存进行搬迁置换,如此以快速换线程执行的方式来加速。

相对于此的,一颗不具多线程能力的处理器,执行一个线程到一半若想改执行另一个线程,就必须将原线程、现线程的相关内容与信息搬迁到快取或内存,然后自快取及内存引入另一个线程,由于此一搬转颇耗时,所以多半选择将原有的线程执行完再引入下一个线程,如此在时间上可能还比较经济。然而无论一线程完整执行后再执行下一个线程,还是进行线程的进出搬迁转移,都不会比具备多线程能力的处理器来的快速有效。

至此我们可以归纳整理:

1.多核、多处理器系统中的每颗处理器(每个核),同时间内可以执行各自不同的行程(或线程)。

2.一颗多线程能力的处理器,无论是支持二线程、四线程、八线程,这些线程都必须是在同一个行程内,所以一颗处理器(一个核)还是只能执行一个行程,双核处理器就能够同时执行两个不同的行程(或线程),四核就可以同时不同的四个行程(或线程)。

3.倘若是执行不支持多线程的程序,其执行上的分拆最多只到行程而未到线程,那么每颗处理器内的多线程功效就无从发挥,而这类的程序历史较长久,相对的原生支持多线程的程序历史较短,不过信息技术的脚步向来进展快速,两种不同层次的支持仅差距数年时间。

产业实际发展可为证明.真的是多核优于、先于多线程吗?关于此可通过产业实际发展做为应证,Sun的UltraSPARC T1处理器(研发代号:Niagara)是八核四线程的设计,但接续的UltraSPARC T2处理器(研发代号:Niagara 2)则是八核八线程的设计,所以是核多、核优先,然后再来拉跋、提升线程的执行。

同样的,IBM为Microsoft Xbox 360所设计的Xenon处理器,是个三核二线程的设计,核数依然是高于线程数,又如IBM、Sony、Toshiba三家业者合研的Cell处理器,现有第一代的Cell(研发代号:DD1)是九核,组态上是八核媒体(SPE)、一核泛用(PPE),新一代的Cell(研发代号:DD2)也针对PPE的部分进行双线程发展,如此再次表示核比线程重要,当Cell仅进行增一线程的扩展改进时,而非再增一核,即可知这仅是一次小幅的改进。

最后,且让我们谈谈与多核、多线程不同加速走向的“多令”,“多令”是笔者发明的词,指的是比执行行程(Process)、线程(Thread)更基底层次的执行指令(Instruction),多核的作法是尽可能在同时间内执行多个行程,多令则是尽可能在同时间内执行多个指令,学术上的VLIW与产业上的EPIC皆是多令理念下的架构。

到目前为止多令并非不可行,但仅行于数字信号、图像等处理,绘图芯片、媒体处理器等多实行VLIW架构,然多令在泛用运算上却未见效益,至于科学研究之类的高效运算也倾向使用更高层次的平行:多机(丛集、网格,执行范畴与分配类同于线程、行程),看来多令、多程/线程、多机各有所用,端看运用场合的适切性。

--------------------------------------------------------------------------------
       传统的应用是单核应用,这意味着它们按顺序依次处理每一个命令。例如,用于运行三个报告的一个单线程应用会首先运行其中一个报告,当该报告完成后才开始运行第二个报告,而后第三个。 现在,许多商业应用和操作系统采用了多线程技术,可在同一时间内利用一颗以上的处理器能力。它们可同时处理多个任务。在上述例子中,所有三个报告在提供多线程能力的系统上可同时进行处理。显著的性能提升来自于在多核服务器和工作站上运行多线程操作系统和应用。

双核技术提高处理效率.目前对于多核技术的第一次实践就是双核处理器技术 - 在一个芯片上整合两个物理核心 - 每个核心都有专用的处理缓存模块。在将来,提供拥有四个或更多物理核心的芯片产品已列入计划,有待技术的成熟;软件产品也将不断创新从而更好地推进多线程技术的性能优势。在多核技术中,由于每个处理器核心可全速执行一个线程,因此单颗处理器可高效地处理多线程运算。通过将两个处理核心封装在一起,在无需大幅度提高总体能耗和总体热散发的条件下双核处理器可显著地增强处理性能。

超线程技术增强处理性能.超线程是多线程处理的一种形式,采用于大多数英特尔处理器上。超线程技术通过添加与物理线程并行的“虚拟”线程实现单核处理器对两个线程的执行。虽然超线程技术可提高处理性能,但潜在的提高远比不上在服务器上添加两个物理处理核心,这是因为在处理“虚拟”线程时会出现超负荷处理现象。

多核技术和超线程技术提高系统效率和性能. 双核技术的设计可执行两个物理线程。配备超线程技术后,双核处理器的设计就能同时处理四个软件命令 - 两个物理和两个虚拟 - 在一个处理器芯片中。这种架构 -将多核技术和超线程技术的结合- 可为目前和将来提供杰出的系统性能和扩展性。

多线程、多核技术是什么技术?相关推荐

  1. 武汉大学“多核架构及编程技术”精品课程理论教学

    请在底部链接下载课件文档. 第一章 导论 1945年,美国研制了世界上第一台全自动电子数字计算机ENIAC(Electronic Numerical Integrator and Calculator ...

  2. CPU的向量化、多核技术、多路技术、众核技术

    向量化:指的是使用同一条指令同时操作多个数据: 多核技术:在同一个芯片上集成多个核心的技术: 多路技术:在同一个主板上集成多个CPU处理器

  3. 利用java多线程技术和图像显示技术来完成动画设计。

    利用java多线程技术和图像显示技术来完成动画设计. package p2;import java.applet.Applet; import java.awt.Graphics; import ja ...

  4. Android多线程和常用异步处理技术

    Android多线程和常用异步处理技术 一.Android多线程概述 1.概述:表示一个程序的多段语句同时执行,但并不等于多次启动一个程序,操作系统也不会把每个线程当作独立的进程来对待. 2.线程和进 ...

  5. KVM虚拟化技术的-NUMA技术和应用

    KVM虚拟化技术的-NUMA技术和应用 NUMA技术是解决多CPU共同工作的技术方案,多CPU共同工作主要有3中架构:SMP:Symmetric Multi-Processor),非统一存储访问结构( ...

  6. 哈工大信息检索研究室 语言技术平台相关技术简介

    模块名称:中文文本自动断句模块 哈工大信息检索研究室 语言技术平台相关技术简介 平台总指导:刘挺教授 平台架构及程序实现负责人:郎君 下列模块按平台处理顺序列出 模块名称:中文文本自动断句模块 负责人 ...

  7. AMiner新功能:技术趋势分析—挖掘技术源头、近期热度和全局热度

    来源:学术头条 本文约2500字,建议阅读5分钟. 本文介绍了AMiner新开放功能的应用. 开放全新功能 技术趋势分析 近日,AMiner开放了一个全新功能,复制下方网址在浏览器打开,或点击文末&q ...

  8. 奇点、技术失控与技术启示录

    来源:资本实验室 回顾过去,我们可以看到历史上各个时期涌现出的众多超越时代的新公司.新产品.新思维和新模式.尽管绝大多数创新产品最终都失败了,但先行者们致力于要解决所在时代各种问题和困难的精神,却影响 ...

  9. “技术崇拜”与“技术恐惧”都会阻碍 AI 创新,“技术节制”才是正道

    来源:36氪 概要:我们需要的是一种能够理解我们不断变化的想法的工具,而不是一个一直试图去模仿我们习惯的工具. 我们需要的是一种能够理解我们不断变化的想法的工具,而不是一个一直试图去模仿我们习惯的工具 ...

  10. php redis 管道技术,Redis管道技术这么厉害,你都用对了吗

    Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务.这意味着通常情况下一个请求会遵循以下步骤: 客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响 ...

最新文章

  1. 【408预推免复习】操作系统之文件管理
  2. C/C++人机猜拳游戏
  3. MYSQL无限级分类表设计及自我连接
  4. 7-6 考试座位号 15 分 C语言代码,PAT Basic 1041. 考试座位号(15)(C语言实现)
  5. java读写mysql数据库_Java读写MySQL数据库小实例
  6. python中pickle模块_python标准库学习之pickle模块
  7. 【mysql】使用脚本对mysql状态进行监控
  8. matlab fts2mat,机器学习——使用Matlab工具箱
  9. 微型计算机原理与接口技术第五版pdf,微型计算机原理与接口技术(第5版)
  10. 2020年注册电气工程师基础考试大纲:公共基础(供配电、发输变电相同)
  11. 面向对象编程思想详解汇总
  12. 如何使用Python来提取视频中的音频
  13. Mapbox加载天地图CGCS2000矢量瓦片地图服务
  14. 【WEB】语言代码缩写表大全(用于Accept-Language)
  15. win10电脑找不到WLAN的解决方法(不显示附近wifi)
  16. 云上办公便捷、安全,就用华为云桌面
  17. Win10 任务栏使用小图标
  18. 函数式编程[Lambda 表达式,Optional,Stream流]从入门到精通(一)
  19. 联想拯救者Y7000P键盘失灵
  20. 高分辨率实时抠像-RobustVideoMatting飞桨复现

热门文章

  1. EUV光刻!宇宙最强DDR4内存造出
  2. 实现二级菜单的滑动出现与消失(解决dispaly与transition冲突问题)
  3. Android动画居然还能这么写
  4. 高德地图入驻广州交警 实现“互联网+交通”无缝对接
  5. Python如何安装模块
  6. Ubuntu和Windows双系统调整启动顺序软件
  7. oracle 偶尔登录超时,OracleClient,间歇性连接问题:应用程序挂起在OracleConnection.Open()上,没有超时,没有引发异常...
  8. Android学习JNI,使用JNI实现字符串加密
  9. FRR BGP协议分析15 -- 路由策略
  10. Linux进程的管理与调度(一)--- Linux进程描述符task_struct结构体详解