最近学习Java多线程开发,发现有些地方理解不到位,不清楚开发的多线程应用程序具体操作系统是如何调度执行的,今简单分享几个关于操作系统基本概念的区分,和我有同样困惑的小伙伴可以一起上车学习哦,嘿嘿!


第一组:CPU、GPU、APU 简单区别:
1、CPU :是传统意义上的中央处理器,是一台计算机的运算核心和控制核心;
2、GPU:中文翻译为“图形处理器”,它是显卡内部的核心芯片,可直接理解它为显卡;
3、APU:叫加速处理器,是AMD(美国AMD半导体公司)融聚理念的产品,它第一次将处理器和独显核心整合在一个晶片上,协同计算、彼此加速,同时具有高性能处理器和独立显卡的处理性能,大幅提升了电脑运行效率,实现了CPU与GPU真正的融合。
4、APU = CPU + GPU?
可以这样理解。但是还包含以下硬件:内存控制器、I/O控制器、专用视频解码器、显示输出和总线接口等等。
CPU和GPU都是计算机的一部分,二者谁也离不开谁,谁也不能代替谁。APU目前只有AMD公司生产,intel的CPU中只是简单加入了显示核芯芯片的模块,所以严格意义上不能称之为APU。
1、双CPU:
①双CPU是指计算机系统拥有两块独立的物理CPU,整套系统靠主板协调两块同时工作,性能理论上是单CPU的两倍。
②双CPU一般应用于服务器等高计算要求的系统上,由于高功耗和高成本,且两块CPU必须相互兼容,一般双CPU在个人电脑平台上很少见。
2、双核:
①什么是核心core?
核心(core)又称为内核,是CPU最重要的组成部分,CPU中心那块隆起的芯片就是核心,是由单晶硅以一定的生产工艺制造出来的,CPU所有的计算、接受/存储命令、处理数据都由核心执行。
各种CPU核心都具有固定的逻辑结构、一级缓存、二级缓存、执行单元、指令级单元和总线接口等逻辑单元都会有科学的布局。
② 什么是双核?
双核简单来说就是2个核心,从双核技术本身来看,什么是双内核?简而言之,双核处理器就是基于单个半导体的一个处理器上拥有两个一样功能的处理器核心。换句话说,将两个物理处理器核心整合入一个核中,即具备两个物理上的运算内核。
双核与双芯是AMD和Intel在双核处理器的物理构造不同之处。AMD将两个内核做在一个Die(晶元)上,通过直连架构连接起来,集成度更高。
Intel则是将放在不同Die(晶元)上的两个内核封装在一起,因此有人将Intel的方案称为“双芯”,认为AMD的方案才是真正的“双核”。
毫无疑问双内核应该具备两个物理上的运算内核,而这两个内核的设计应用方式却大有文章可作。据现有的资料显示,AMDOpteron处理器从一开始设计时就考虑到了添加第二个内核,两个CPU内核使用相同的系统请求接口SRI、HyperTransport技术和内存控制器,兼容90纳米单内核处理器所使用的940引脚接口。而英特尔的双核心却仅仅是使用两个完整的CPU封装在一起,连接到同一个前端总线上。可以说,AMD的解决方案是真正的“双核”,而英特尔的解决方案则是“双芯”。可以设想,这样的两个核心必然会产生总线争抢,影响性能。不仅如此,还对于未来更多核心的集成埋下了隐患,因为会加剧处理器争用前端总线带宽,成为提升系统性能的瓶颈,而这是由架构决定的。因此可以说,AMD的技术架构为实现双核和多核奠定了坚实的基础。AMD直连架构(也就是通过超传输技术让CPU内核直接跟外部I/O相连,不通过前端总线)和集成内存控制器技术,使得每个内核都有自己的高速缓存可资遣用,都有自己的专用车道直通I/O,没有资源争抢的问题,实现双核和多核更容易。而Intel是多个核心共享二级缓存、共同使用前端总线的,当内核增多,核心的处理能力增强时,肯定要遇到堵的。
3、超线程技术:
超线程技术就是平时说的虚拟核,eg:物理2核虚拟4核。CPU超线程技术就是利用特殊字符的硬件指令,把两个逻辑内核模拟成物理芯片,让单个处理器能使用线程级并行计算,从而兼容多线程并行计算,从而兼容多线程操作系统和软件,使运行性能提高,使芯片性能得到提升
虽然采用超线程技术能同时执行两个线程,但它并不象两个真正的CPU那样,每个CPU都具有独立的资源;当两个线程都同时需要某一个资源时,其中一个要暂时停止,并让出资源,直到这些资源闲置后才能继续,因此超线程的性能并不等于两颗CPU的性能。
在运行性能方面:双CPU>双核CPU>超线程CPU>单CPU
在价格上也是双CPU>双核CPU>超线程CPU>单CPU
第三、操作系统管理哪些资源?
1、硬件资源:CPU,打印机等;软件资源:数据,程序等。
操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。
操作系统理论研究者有时把操作系统分成四大部分:
①驱动程序:最底层的、直接控制和监视各类硬件的部分,它们的职责是隐藏硬件的具体细节,并向其他部分提供一个抽象的、通用的接口;
②内核:操作系统之最内核部分,通常运行在最高特权级,负责提供基础性、结构性的功能;
③支承库:是一系列特殊的程序库,它们职责在于把系统所提供的基本服务包装成应用程序所能够使用的编程接口,是最靠近应用程序的部分;
④外围:指操作系统中除以上三类以外的所有其他部分,通常是用于提供特定高级服务的部件,例如,在微内核结构中,大部分系统服务,以及UNIX/Linux中各种守护进程都通常被划归此列。
2、进程(运行的程序)共享哪些资源?
① 进程共享资源包括软件资源和硬件资源。
软件资源有变量、表格、队列,硬件资源有物理设备,例如:打印机,输入设备、共享CPU和内存。
共享CPU采用进程方法实现,共享内存采用进程有独立的内存空间,相互之间不能互相访问,共享内存是进程共享操作系统空间资源。
进程共享操作系统空间的目的是传递数据,或者进程通信。操作系统专门划出一个区域作为共享内存区域,而要使用这个共享内存的进程,必须将这个区域连接到内存图像中。而进程的消息队列也是在操作系统的内核空间中,但是属于某一个进程,所以共享的色彩并不浓厚。此外,从另一个观念看,进程之间传递数据,因为进程的数据段相互独立,所以不能通过地址访问另一个进程的数据,只有采用共享“软件资源”的方法处理数据。这里显然把共享内存看作共享软件资源。
进程通信的方法有:共享内存,消息队列和共享文件三种主要方式。此外,共享数据结构的方法,例如生产者-消费者问题的有界缓冲区;还有信箱作为中间实体的间接通信方式,也是进程通信的方法。
1、程序、进程、线程关系:
简而言之几乎所有的操作系统都支持同时运行多个任务,一个任务通常就是一个程序,每个运行中的程序就是一个进程(Process)。当一个程序运行时,内部可能包含了多个顺序执行流,每个顺序执行流就是一个线程。
几乎所有的操作系统都支持进程的概念,所有运行中的任务通常对应一个进程(Process)。当一个程序进入内存运行时,即变成一个进程。进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位。
一般而言,进程包含如下3个特征:
独立性:进程是系统中独立存在的实体,它可以拥有自己独立的资源,每一个进程都拥有自己私有的地址空间。在没有经过进程本身允许的情况下,一个用户进程不可以直接访问其他进程的地址空间。
动态性:进程与程序的区别在于,程序只是一个静态的指令集合,而进程是一个正在系统中活动的指令集合。在进程中加入了时间的概念。进程具有自己的生命周期和各种不同的状态,这些概念在程序中都是不具备的。
并发性:多个进程可以在单个处理器上并发执行,多个进程之间不会互相影响。
①多线程则扩展了多进程的概念,使得同一个进程可以同时并发处理多个任务。线程(Thread)也被称作轻量级进程(Lightweight Process),线程是进程的执行单元。就像进程在操作系统中的地位一样,线程在程序中是独立的、并发的执行流。
②当进程被初始化后,主线程就被创建了。对于绝大多数的应用程序来说,通常仅要求有一个主线程,但也可以在该进程内创建多条顺序执行流,这些顺序执行流就是线程,每个线程也是互相独立的。
③线程是进程的组成部分,一个进程可以拥有多个线程,一个线程必须有一个父进程。
④线程可以拥有自己的堆栈、自己的程序计数器和自己的局部变量,但不拥有系统资源,它与父进程的其他线程共享该进程所拥有的全部资源。因为多个线程共享父进程里的全部资源,因此编程更加方便;但必须更加小心,我们必须确保线程不会妨碍同一进程里的其他线程。线程可以完成一定的任务,可以与其他线程共享父进程中的共享变量及部分环境,相互之间协同来完成进程所要完成的任务。
⑤线程是独立运行的,它并不知道进程中是否还有其他线程存在。线程的执行是抢占式的,也就是说,当前运行的线程在任何时候都可能被挂起,以便另外一个线程可以运行。
⑥一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行。从逻辑角度来看,多线程存在于一个应用程序中,让一个应用程序中可以有多个执行部分同时执行,但操作系统无须将多个线程看作多个独立的应用,对多线程实现调度和管理以及资源分配。线程的调度和管理由进程本身负责完成。
⑦简而言之,操作系统可以同时执行多个任务,每个任务就是进程;进程可以同时执行多个任务,每个任务就是线程。
4、线程调度:
多个线程受到操作系统的调度控制,决定何时运行哪个线程。所谓的线程调度,是指操作系统决定如何安排线程执行顺序的算法。按照常规的分类,线程调度可分为抢占式调度和非抢占式调度两种方法。
① 抢占式调度
抢占式调度是指每个线程都只有极少的运行时间,而当时间用完时该线程就会被强制暂停,保存上下文并把运行权利交给下一个线程,这样调度的结果就是所有的线程都在被快速地切换运行,使得使用者感觉所有的线程在并行运行。
② 非抢占式调度
非抢占式调度是指某个线程在运行时不会被操作系统强制暂停,它可以持续地运行直至运行告一段落并主动地交出运行权。在这样的调度模式之下,线程的运行就完全是单队列的,并且可能产生恶意程序长期霸占运行权的情况。
现在很多的操作系统,包括微软公司的Windows系统,都同时采用抢占式和非抢占式模式。对于那些优先级相当高的线程,操作系统采用非抢占式来给予充分的时间运行,而对于普通的线程,则采用抢占式模式来快速地切换执行。
第五组:并发和并行:
并发性(concurrency)和并行性(parallel)是两个概念,并行指在同一时刻,有多条指令在多个处理器上同时执行;并发指在同一时刻只能有一条指令执行,但多个进程指令被快速轮换执行,使得在宏观上具有多个进程同时执行的效果。
大部分操作系统都支持多进程并发运行,现代的操作系统几乎都支持同时运行多个任务。例如,笔者一边开着开发工具在写程序,一边开着参考手册备查,同时还使用电脑播放音乐……除此之外,每台电脑运行时还有大量底层的支撑性程序在运行……这些进程看上去像是在同时工作。但事实的真相是,对于一个CPU而言,它在某个时间点只能执行一个程序,也就是说,只能运行一个进程,CPU不断地在这些进程之间轮换执行。那么为什么我们感觉不到任何中断现象呢?这是因为CPU的执行速度相对我们的感觉来说实在是太快了(当然,如果启动的程序足够多,我们依然可以感觉到程序的运行速度下降),所以虽然CPU在多个进程之间轮换执行,但我们感觉到好像有多个进程在同时执行。
现代的操作系统都支持多进程的并发,但在具体的实现细节上可能因为硬件和操作系统的不同而采用不同的策略。比较常用的方式有:共用式的多任务操作策略,例如Windows 3.1和Mac OS9;目前操作系统大多采用效率更高的抢占式多任务操作策略,例如WindowsNT、Windows2000以及UNIX/Linux等操作系统。
如果只存在一个CPU,进程之间只能是并发的执行,如果存在多个CPU就可以并行的执行;
如果一个CPU存在多核,就可以从程序上实现多线程的并行执行(也可以选择并发执行),因为多核的CPU每个核都拥有独立的逻辑运算系统,所以对操作系统来说度,每个核都是一个逻辑运算单元,即不同内核可以同时进行不同的逻辑运算,这就满足了并行计算对硬件系统的要求。
如果一个CPU是有一核,则只能选择并发执行。
简单对比总结了一下,感兴趣小伙伴非常欢迎留言交流哦~~


欢迎关注ITSK,每天进步一点点,我们追求在交流中收获成长和快乐





