*** 作系统的基本特征?

 *** 作系统的基本特征?,第1张

并发性、共享性、虚拟性、异步性。
并发:指两个或多个事件在同一时间间隔内发生,这些事件宏观上是同时发生的,但在微观上是交替发生的。并行:指两个或多个事件在同一时刻发生。 *** 作系统的并发性:指计算机系统中“同时”地运行着多个程序,这些程序宏观上是同时运行的,在微观上是交替运行的。 *** 作系统和程序并发是一起诞生的。我们的计算机的CPU有单核的,双核的,四核的,八核的!单核CPU同一时刻只能运行一个程序,各个程序只能并发地执行(交替地使用CPU)!多核CPU同一时刻可以执行多个程序,多个程序可以并行地执行(同时发生运行)。共享:即资源共享,是指系统中的资源可供内存中多个并发执行的进程中同时使用。所谓“同时”,往往是宏观上的,而在微观上,这些进程可能是交替地对资源进行访问的(即分时共享)。两种资源共享方式:互斥共享方式和同时共享方式。互斥共享方式:系统中的某些资源,虽然可以提供给多个进程使用,但一个时间段内只允许一个进程访问该资源。同时共享方式:系统中的某些资源,允许一个时间段内由多个进程“同时”对它们进行访问。并发性和共享性互为存在条件的。虚拟:是指一个物理上的实体变为若干个逻辑上的对应物,物理实体(前者)是实际存在的,而逻辑上对应物(后者)是用户感受到的。异步:在多道程序环境下,允许多个程序并发的执行,但由于资源有限,进程的执行不是一管到底的,而是走走停停已不可预知的速度向前推进,这就是进程的异步性!只有系统拥有并发性,才有可能导致异步性,没有并发和共享,就谈不上虚拟和异步。
*** 作系统(OperationSystem,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织和调度计算机的工作和资源的分配,以提供给用户和其他软件方便地接口和环境,它是计算机系统中最基本的系统软件。用户可以直接和 *** 作系统进行交互,但是大多数情况下都是通过应用软件与 *** 作系统进行交互。硬件指的是CPU、内存、硬盘等资源。

没有这么说吧,如果一定要找个理由的话,我认为有两点:
一是高度开销比较大。如果你的异步代码过小,但是并发数量又很大的话,那么进程(线程)间切换所消耗的时间可能比代码本身执行的时间还要长,那么随着并发数量的增大,进程调试的代价比例越来越大,就得不偿失了。
二是安全性。异步代码最大的问题就是线程安全。你要在异步代码中考虑全局变量的一致性问题,竞争问题,所以就带来额外的锁、信号量等等,不仅加重了代码负担,也容易出错。所以很多教科书都建议不要在异步代码中访问全局变量(但实际工作中毕竟难以避免)。如果大量并发线程都在竞争一个全局变量,那么实际上并发带来的好处就已经消失不见了。

运行结果:
do task 1
do task 2
do task 3
同步执行take time: 6s

do task 1
do task 2
do task 3
results :[do task 1 success, do task 2 success, do task 3 success]
异步多线程take time: 3s

异步编排take time: 0s
do task 1
do task 2
do task 3
results :[do task 1 success, do task 2 success, do task 3 success]

进程和线程都是由 *** 作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:
简而言之,一个程序至少有一个进程,一个进程至少有一个线程
也就是说一个进程可以有很多线程。
“并行”是指无论从微观还是宏观,二者都是一起执行的,就好像两个人各拿一把铁锨在挖坑,一小时后,每人一个大坑。
而“并发”在微观上不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行,从宏观外来看,好像是这些进程都在执行,这就好像两个人用同一把铁锨,轮流挖坑,一小时后,两个人各挖一个小一点的坑,要想挖两个大一点得坑,一定会用两个小时。
从以上本质不难看出,“并发”执行,在多个进程存在资源冲突时,并没有从根本提高执行效率。

1,我们公司一开始带饭的人不是很多,公司只有一个茶水间,于是行政的**姐很体贴的买了一个微波炉放到茶水间,然后大家中午可以在茶水间排队去热饭。很开心。

2,后来公司发展越来越好,不断有新鲜的血液注入到公司,充满了活力,带饭的人越来越多,行政**姐发现一个微波炉根本不够用,于是又卖了两个,大家中午继续去茶水间排队去热饭,速度比以前快了许多,大大缓解了排队过长的压力。

3,某一天公司上市了,发展一片大好,人员也越来越多,于是公司换了新的办公地点,将原来的一个茶水间扩充到了3个,微波炉每个茶水间放5个,同时雇了一个阿姨,专门辅助员工的一些生活方面的事,让员工可以安安心心工作,于是变成了这样,到中午的时候,员工选择3个茶水间一个,将饭盒放在茶水间里,阿姨负责将饭热好放到指定位置,一个阿姨就可以同时 *** 作多个微波炉,一个热好后取出放入下一个,大大提高了热饭效率,热好的饭可以放到指定位置一会自己来取即可,也可以送到员工的位置,大家中午再也不用排队热饭了,
多个茶水间相当于多进程(放在python也可以理解为多核),大大提高了效率,但同时开销也很多,增加一个茶水间的代价远大于增加一个微波炉。

进程,直观点说,保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体 有自己独立的地址空间,有自己的堆 ,上级挂靠单位是 *** 作系统。 *** 作系统会以进程为单位,分配系统资源(CPU时间片、内存等资源),进程是资源分配的最小单位 。

大家排队去茶水间热饭,先到的先热,同一茶水间同时只有一个人在热饭。即使有多个微波炉也是顺序的开始工作,三个微波炉相当于三个线程,同时可以热三份饭,但热饭的人是顺序进入茶水间的。

线程,有时被称为轻量级进程(Lightweight Process,LWP),是 *** 作系统调度(CPU调度)执行的最小单位 。

阿姨可以同时 *** 作多个微波炉,一个热好后取出放入下一个,大大提高了热饭效率,哪个微波炉热好就先用哪个,所以协程是无序的,大大提高了工作效率。

一个阿姨在多个茶水间和微波炉工作 充分利用多核

协程,是一种比线程更加轻量级的存在,协程不是被 *** 作系统内核所管理,而完全是由程序所控制(也就是在用户态执行)。这样带来的好处就是性能得到了很大的提升,不会像线程切换那样消耗资源。

协程在子程序内部是可中断的,然后转而执行别的子程序,在适当的时候再返回来接着执行 。

阿姨热好饭之后放到指定位置,每个人可以根据自己的时间过来取,如果阿姨空闲了也可以送到员工工位。

公司初期人员较少,所有员工在唯一的一个茶水间排队使用同一个微波炉,顺序使用微波炉。

公司中期增加了微波炉的数量,所有员工在茶水间排队使用多个微波炉,多个微波炉同时工作。

公司发展后期增加了茶水间和微波炉的数量,只有一个阿姨使用多个茶水间的微波炉,只有在微波炉可以使用的条件下才去使用,其他时间可以干其他事情。
区别:

调度 : 线程作为调度和分配的基本单位,进程作为拥有资源的基本单位 ;

并发性 : 不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行 ;

拥有资源 : 进程是拥有资源的一个独立单位,线程不拥有系统资源 ,但可以访问隶属于进程的资源。进程所维护的是程序所包含的资源(静态资源), 如: 地址空间,打开的文件句柄集,文件系统状态,信号处理handler等 ;线程所维护的运行相关的资源(动态资源),如: 运行栈,调度相关的控制信息,待处理的信号集等 ;

系统开销 :在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。但是进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个进程死掉就等于所有的线程死掉,所以 多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些 。
联系:

一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程 ;

资源分配给进程,同一进程的所有线程共享该进程的所有资源;

处理机分给线程,即 真正在处理机上运行的是线程 ;

线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。
协程的特点在于是一个线程执行,那和多线程比,协程有何 优势 ?

极高的执行效率 :因为 子程序切换不是线程切换,而是由程序自身控制 ,因此, 没有线程切换的开销 ,和多线程比,线程数量越多,协程的性能优势就越明显;

不需要多线程的锁机制 :因为只有一个线程,也不存在同时写变量冲突, 在协程中控制共享资源不加锁 ,只需要判断状态就好了,所以执行效率比多线程高很多。
(1)进程可使用multiprocessing包实现

与threadingThread类似,它可以利用multiprocessingProcess对象来创建一个进程。

该进程可以运行在Python程序内部编写的函数。

该Process对象与Thread对象的用法相同,也有start(), run(), join()的方法。

(2)线程可使用threading包或thread包
(3)协程通过async await 实现,async声明一个函数为异步函数,await可将程序挂起,去执行其他的异步程序。协程 有两种,一种 无栈协程,python 中 以 asyncio 为代表, 一种有栈协程,python 中 以 gevent 为代表。
(1)以多进程形式,允许多个任务同时运行;

(2)以多线程形式,允许单个任务分成不同的部分运行;

(3)提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/13491935.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-17
下一篇 2023-08-17

发表评论

登录后才能评论

评论列表(0条)

保存