For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
我们在前几期的文章中给大家简单介绍了Java编程开发程序员需要掌握的一些基础知识等内容,而本文我们就继续来学习一下,Java编程多进程与多核心调度方法。
1、多个进程
进程的提出就是为了实现多进程,让一个进程在等待某一个资源时,CPU去执行另外的进程。
可以看到,每个进程都有自己的CPU上下文,来保护进程的执行状态和轨迹。我们选择一个进程,对其CPU上下文保存和加载,这样就实现了进程的调度,进而演化出各种进程调度算法
进程调度涉及到给进程设置相应的状态,我们看看通常进程有哪些状态。人有生老病死,进程也是一样。一个进程从建立到运行,还可能因为资源问题不得不暂停运行,后进程还要退出系统。这些过程,我们称为进程的生命周期。
在系统实现中,通常用进程的状态来表示进程的生命周期。进程通常有五种状态,分别是运行状态、睡眠状态、等待状态、新建状态、僵死状态。其中进程僵死状态,表示进程将要退出系统,不再进行调度。
2、多核心调度
SMP系统的出现,对应用软件没有任何影响,因为应用软件始终看到是一颗CPU,然而这却给操作系统带来了麻烦,操作系统必须使每个CPU都正确地执行进程。
来看下操作系统都需要解决哪些问题?
操作系统要开发更先进的同步机制,解决数据竞争问题。
之前同一时刻下只有一个CPU能运行进程,对系统中的全局数据的读写,没有任何竞争问题,现在不同了,同一时间下有多个CPU能执行进程。比如说,CPU1执行的进程读写全局数据A时,同时CPU2执行进程也在读写全局数据A,这就是读写竞争问题,会导致数据A状态不一致,进而引发更为致命的错误。
为解决这样的问题,操作系统开发出了原子变量、自旋锁、信号量等高级的同步机制。用这些锁对全局的数据进行保护,确保同一时刻只有一个进程读写数据。
解决了数据竞争问题,还得解决进程调度问题。
这就需要使得多个CPU尽量忙起来,否则多核还是等同于单核。让CPU忙起来的方法很简单,就是让它们不停地运行进程,要让每个CPU都有“吃不消”的感觉。
操作系统需要对进程调度模块进行改造。单核CPU一般使用全局进程队列,系统所有进程都挂载到这个队列上,进程调度器每次从该队列中获取进程让CPU执行。多核下如果使用全局队列需要同步,会导致性能下降,所以多核下一般是每个CPU核心一个队列。
多核心系统下,每个CPU一个进程队列,虽然提升了进程调度的性能,但同时又引发了另一个问题——每个CPU的压力各不相同。这是因为进程暂停或者退出,会导致各队列上进程数量不均衡,有的队列上很少或者没有进程,有的队列上进程数量则很多,间接地出现一部分CPU太忙吃不消,而其他CPU太闲(处于饥饿空闲状态)的情况。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!请读者仅作参考。更多内容请加抖音达内三江区域学习了解。