单核CPU vs. 多核CPU

单核CPU vs. 多核CPU

单核CPU

起源:

CPU的起源是1971年英特尔公司推出,由此正式宣告计算机的诞生,可以说是世界级的改变,并且严格准守冯诺依曼体系结构,在英特尔推出CPU之前的计算机所使用的处理器工作是非常麻烦的,需要复杂的线路组合才能使其正常工作,当然英特尔推出的CPU也是需要线路组合,但是相比之前的线路英特尔的要较为简洁,并且英特尔将这些线路组合称为总线!

工作原理:

单核CPU较为死脑,在通电时该CPU就会执行存储块中的指定地址的指令,如果你想要执行内存块其他地方的代码必须调整总线位置才可以让其执行!

单核CPU就相当于阻塞程序,在工作期间只能执行某一个程序!

单核(超时间轴)CPU

显而易见,单核CPU并不是长久的,所以英特尔推出了时间轴的工作方式,一个CPU干上两个或两个以上的CPU的活。因为CPU的工作速度取决于晶体管,晶体管越多,CPU每秒工作率就越大,英特尔就想了一个增加CPU的晶体管的办法,让CPU的工作频率赫兹增加,然后增加北桥芯片用于和内存通讯,再将地址总线与内存对应起来(以次方的方式),这样就无需每次执行其他程序前修改一次线路了。

最后需要操作系统的帮忙,当CPU通电时会一直执行某一块内存的代码,但是无需手动修改线路了。此外CPU中还有时钟电路,该电路用于控制CPU多少毫秒跳转到指定地址,那么操作系统可以利用时钟电路让其CPU跳转到其他地方,然后再跳转回来!

PS:晶体管是一种固体半导体器件,具有检波、整流、放大、开关、稳压、信号调制等多种功能。晶体管作为一种可变电流开关,能够基于输入电压控制输出电流。

多核CPU

多核CPU,即多个CPU组成。这些CPU集成在一个芯片里,可以通过内部总线来交互数据,共享数据,这些CPU中分配出一个独立的核执行操作系统,每个核都有自己的寄存器,ALU运算单元等(这些都是封装在CPU内部的),但是一级二级缓存是共享的,这些CPU通过总线来交互数据,并且工作是并行的,资源分配是由操作系统来完成,操作系统来决定程序CPU的控制权分配,所以一个多核CPU的工作效率大多体现在操作系统的分配上,因为一个CPU基本上可以执行很多个程序,通过PCB进程控制块的方式存储当前代码段,然后来回跳转,所以当CPU核过多时,操作系统在分配时可能会导致部分CPU闲置!

多个CPU

即拥有多个CPU的主机,每个CPU只能用来独立执行不同的程序,这些CPU都是单核的,不用在家用电脑,只用在特定的机器上。因为单核CPU执行一个程序比来回跳转执行的速度要快很多,但是难以管理。每个CPU有自己的总线,一级二级缓存,那么这样需要更大的占用面积,更多的总线,因为这些CPU不是封装在一个芯片里的!

单核CPU和多核CPU的区别:

双核的优势不是频率,而是对付同时处理多件事情。单核同时只能干一件事,比如你同时在后台BT下载,前台一边看电影一边拷贝文件一边QQ。这么多程序同时需要CPU来响应要靠操作系统,Windows本身就是多线程操作系统(DOS就是单线程系统,DOS下双核和单核没区别,处理一个任务时必须停下来等待处理结束才能干下一件事),它可以把每个处理任务划分为“多份”,多个处理任务按顺序排成队列,这样单核的CPU可以一次处理“一份”,轮流处理每个程序的“份”,这样感觉就是CPU同时在干几件事了。但如果CPU不够强劲,同时排队等待处理的东西太多了,那就会感觉系统在等待、有延时、反应慢等症状。再或者某个程序出现错误,死机了,造成后面排队的其他任务都在那里干等,造成系统无反应。

双核CPU就是基板上集成有多个单核CPU,自己集成了任务分配系统,再搭配操作系统就能真正同时开工,两个核心同时处理“两份”任务,速度快了,万一一个核心死机,起码另一个CPU还可以继续处理关闭软件、关机等任务。

所以一方面每个核心的性能还在发展,另一方面多核心集成的手段双管齐下,这样CPU的性能可以迅速提升。1G双核应该比1G单核快近2倍,那么1G的4核应该比1G的双核快近2倍!如果有4G的双核,那么应该和2G的四核性能近似。


下面是一些道友的见解,记录于此处,便于以后查阅:

@ 单核CPU上运行的多线程程序, 同一时间只能一个线程在跑, 系统帮你切换线程而已, 系统给每个线程分配时间片来执行, 每个时间片大概10ms左右, 看起来像是同时跑, 但实际上是每个线程跑一点点就换到其它线程继续跑。

@ 多线程的用处在于,做某个耗时的操作时,需要等待返回结果,这时用多线程可以提高程序并发程度。如果一个不需要任何等待并且顺序执行能够完成的任务,用多线程简直是浪费。

@ 线程必然不是越多越好,线程切换也是要开销的,当增加一个线程时,额外开销要小于该线程能够消除的阻塞时间,这才叫物有所值。Linux自从2.6内核开始,就会把不同的线程交给不同的核心去处理。Windows也从NT.4.0开始支持这一特性。

@ 什么时候该使用多线程呢?这要分四种情况讨论:

a.多核CPU——计算密集型任务。此时要尽量使用多线程,可以提高任务执行效率,例如加密解密,数据压缩解压缩(视频、音频、普通数据),否则只能使一个核心满载,而其他核心闲置。

b.单核CPU——计算密集型任务。此时的任务已经把CPU资源100%消耗了,就没必要也不可能使用多线程来提高计算效率了;相反,如果要做人机交互,最好还是要用多线程,避免用户没法对计算机进行操作。

c.单核CPU——IO密集型任务,使用多线程还是为了人机交互方便。

d.多核CPU——IO密集型任务,这就更不用说了,跟单核时候原因一样。

@ CPU的多核和应用程序的多线程的关系

        多核指的是CPU有多个核心,多线程是程序有多个线程在同时执行。

        多核要用多线程才能发挥优势。同样,多线程要在多核上才能真正有优势。

        这点来说,对程序员不是透明的。程序员可以控制程序/线程在哪个CPU(核)上运行。用户也可以控制程序在哪几个核上运行。所以,多核、多线程对用户和程序员都不是透明的。


继续补充一点关于“进程、线程”的知识

进程和线程都是操作系统的概念。进程是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成,即进程是操作系统进行资源分配的最小单元。进程在运行过程中创建的资源随着进程的终止而被销毁,所使用的系统资源在进程终止时被释放或关闭。

线程是进程内部的一个执行单元。系统创建好进程后,实际上就启动执行了该进程的主执行线程,主执行线程以函数地址形式,比如说main或WinMain函数,将程序的启动点提供给Windows系统。主执行线程终止了,进程也就随之终止。

每一个进程至少有一个主执行线程,它无需由用户去主动创建,是由系统自动创建的。用户根据需要在应用程序中创建其它线程,多个线程并发地运行于同一个进程中。一个进程中的所有线程都在该进程的虚拟地址空间中,共同使用这些虚拟地址空间、全局变量和系统资源,所以线程间的通讯非常方便,多线程技术的应用也较为广泛。

多线程可以实现并行处理,避免了某项任务长时间占用CPU。要说明的一点是,目前大多数的操作系统教材中的单处理器都是指的单核处理器。对於单核单处理器(CPU),为了运行所有这些线程,操作系统为每个独立线程安排一些CPU时间,操作系统以轮换方式向线程提供时间片,这就给人一种假象,好像这些线程都在同时运行。由此可见,如果两个非常活跃的线程为了抢夺对CPU的控制权,在线程切换时会消耗很多的CPU资源,反而会降低系统的性能。

最开始,线程只是用于分配单个处理器的处理时间的一种工具。但假如操作系统本身支持多个处理器,那么每个线程都可分配给一个不同的处理器,真正进入“并行运算”状态。从程序设计语言的角度看,多线程操作最有价值的特性之一就是程序员不必关心到底使用了多少个处理器,只需将程序编写成多线程模式即可。程序在逻辑意义上被分割为数个线程;假如机器本身安装了多个处理器,那么程序会运行得更快,毋需作出任何特殊的调校。

根据前面的论述,大家可能感觉线程处理非常简单。但必须注意一个问题:共享资源!如果有多个线程同时运行,而且它们试图访问相同的资源,就会遇到一个问题。举个例子来说,两个线程不能将信息同时发送给一台打印机。为解决这个问题,对那些可共享的资源来说(比如打印机),它们在使用期间必须进入锁定状态。所以一个线程可将资源锁定,在完成了它的任务后,再解开(释放)这个锁,使其他线程可以接着使用同样的资源。

线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。

最简单的比喻,多线程就像火车的每一节车厢,而进程则是火车。车厢离开火车是无法跑动的,同理火车也不可能只有一节车厢。多线程的出现就是为了提高效率。同时它的出现也带来了一些问题。

注:单核处理器并不是一个长久以来存在的概念,在近年来多核心处理器逐步普及之后,单核心的处理器为了与双核和四核对应而提出。顾名思义处理器只有一个逻辑核心。

多核处理器和多处理器的区别

多核是指一个CPU有多个核心处理器,处理器之间通过CPU内部总线进行通讯。而多CPU是指简单的多个CPU工作在同一个系统上,多个CPU之间的通讯是通过主板上的总线进行的。

从以上原理可知,N个核的CPU,要比N个CPU在一起的工作效率要高(单核性能一致的情况下)。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章