按照常规,我们先来了解一下CPU和单核处理器以及多核处理器百度百科的概念吧
CPU:官名叫做微处理器,微处理器由一片或少数几片大规模集成电路组成的中央处理器,这些电路执行控制部件和算数逻辑部件的功能。
从这里我们可以得知,它可以完成相应的计算机计算功能,百度百科的解释是,微处理器能完成取指令,执行指令,(我们写的程序,不论是java语言还是c语言最终都会编译成机器指令进行相应的运算)以及与外界存储器和逻辑部件交换信息等操作,是微型计算机的运算控制部分,他可与存储器和外围电路芯片组成微型计算机。
总结一句话:CPU是运行机器指令和与存储等逻辑部件交换信息的东西。
知道了CPU是干什么的,下面我们来了解一下CPU的结构,或者说是他的组成部分功能。
主要分为两部分 1 执行部件:执行计算机指令的部分
2 总线接口部件:与计算机总线联系,执行从存储器取指令的操作。
执行部件有一个寄存器堆:由8个16位的寄存器组成,用于存放数据,变址,和堆栈指针,算数运算逻辑单元执行算术运算和逻辑操作。
内部总线:用来连接微处理器的各功能部件并传送微处理器内部的数据和控制信号。
存储器:微型计算机的存储器用来存放当前正在使用的或经常使用的程序和数据,存储器按读,写方式分为随机存储器RAM和只读存储器ROM
RAM 也称为读写存储器,工作过程中CPU可根据需要随时对其内容进行读和写操作,RAM的内容断电后全部丢失,ROM只能读出不能写入,断电后可以保存。
单核就是CPU集成了一个运算核心;
双核是两个运算核心,相当于两个CPU同时工作;
四核是四个运算核心,相当于四个CPU同时工作; 简单的比喻:
完成同样的任务,由一条生产线来完成或由两条稍慢的生产线来完成或由四条更慢的生产线来完成,虽然生产线的生产速度慢,但由于同时进行的生产线多,所以任务的最终完成时间可能最短。 一般来看,如果经常运行大型软件或游戏,或经常进行图形设计,尽量采用多核处理器,可以有效提高处理速度。 在几年以前,也曾有过类似的方法,就是主板支持双CPU,一般服务器用得多些。
多道程序设计
在进程执行过程中常常会因为资源请求或者IO被阻塞或中断(有的请求或者中断需要处理很长时间),此时CPU便空闲出来,众所周知,CPU是计算机中非常宝贵的资源,为提高其利用率,操作系统需通过进程切换,将CPU交给就绪队列的某个进程使用;等上次被阻塞或者中端的进程再次满足执行条件(一般是请求的资源得到满足或者IO完成等)后,操作系统便通过调度算法将CPU再次交给该进程执行任务,其中操作系统的进程调度算法有多种(例如在交互式系统(windows)中的进程调度算法有时间片轮转调度、优先级调度、多级队列调度等,这些相信大家都很熟悉了,此处不再进一步阐述),具体选择依赖操作系统。这时从用户的角度感觉是多个进程在同时执行,这的易于操作系统通过进程调度将一个cpu变成多个虚拟的CPU,实现多个进程的伪并发。在《现在操作系统》中将这种进程间的切换称之为“多道程序设计”。
(注:每个进程在执行过程中表现了不同的形态,CPU需要根据进程执行过程中的特性制定CPU调度算法从而提高CPU利用率)
(注:CPU的并发需求产生了进程,进程执行过程中的特性产生了CPU调度算法,CPU调度时需要维护每个进程特有的数据和空间,因此产生了维护每个进程的进程表项)
谈到了进程就不得不说说线程
线程:我们先看看维基百科对线程的定义:线程(英语:thread)是操作系统能夠進行運算调度的最小單位。它被包含在进程之中,是行程中的實際運作單位。一条线程指的是进程中一个单一顺序的控制流,一個进程中可以並行多個线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。此外,从资源分配的角度看,进程是资源所有资源分配的基本单位,线程则是CPU调度的基本单位,即使在单线程进程中也是如此。
现在我们通过考察一个例子,就可以更清楚看出多线程的有益之处了。
假设用户正在编辑一本书。对于编辑这来说,最容易的办法是把正本书作为一个文件,便于编辑;而对于计算机来说把每个章节作为一个文件处理起来更快,但对于编辑者来说修改就太麻烦了,因为有的修改不止设计一个章节而是整本书,例如在整本书中替换某个词或字等等,如果整本书作为一个文件,正样处理就方便多了。否则,就得对每个章节所在文件进行处理。
现在如果用在一个1000页的文档中删除第一页的某一行的某个词,为保证格式的正确性,字处理软件需要对文档进行格式处理。但此时用户需要立刻跳到地800也进行另外一处修改,于是字处理软件被强制对整个书的前800页进程格式处理,因为在排列该页前面的所有页面之前,字处理软件并不知道第800页的第一行应该在哪里。而在第800也的页面可以显示在屏幕之前,计算机可能要拖延想当长一段时间进行处理,从而令用户不甚满意。
此时,多线程便可以有用武之地了。假设字处理软件编写成含有两个线程的程序。一个线程处理用户的交互,另一个用来在后台进行格式处理。一旦第一页发生的修改,交互线程就立即同时后台格式处理线程重现整理整本书的格式。同时,交互式线程继续监控用户的鼠标、键盘,并响应诸如第一页之类的简单命令,此刻,后台线程正在进行疯狂的运算,如果运气好的话,格式整理可能在用户请求查看第800页之前完成,这样用户就感觉不到延迟了。
同理,为保证用户的编辑工作得到及时保存,可以在添加一个现场周期性对文件进现场可以处理磁盘备份,而不必干扰其他两个线程。
此处,很显然,这里用三个不同的进程是不能工作的,因为三个线程都需要在同一个文件上进行操作,通过三个线程,由于一个进程内的所有线程共享公共内存,于是便可以在同一文件上进行处理。同理,其他的交互式程序也可以采用同样的设计方法