进程之并行并发、同步异步与阻塞非阻塞

关于进程必备的理论基础:
1.操作系统的作用:
隐藏丑陋复杂的硬件接口,提供良好的抽象接口
管理、调度进程,并且将多个进程对硬件的竞争变得有序
2.多道技术:
产生背景:
针对单核,实现并发
现在的主机一般是多核,那么每个核都会利用多道技术
4个cpu,运行于cpu1的某个程序遇到io阻塞,会等到io结束再重新调度
会被调度到4个cpu中的任意一个,具体由操作系统调度算法决定
空间上的复用:
如内存中同时有多道程序
时间上的复用:
复用一个cpu的时间片
注意:遇到io切,占用cpu时间过长也切
核心在于切之前将进程的状态保存下来
这样才能保证下次切换回来时,能基于上次切走的位置继续运行



进程概念:
进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。
它是操作系统动态执行的基本单元
在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。

进程与程序的区别
程序:
是指令和数据的有序集合,是一个静态的概念。
可以作为一种软件资料长期存在
是永久的
进程:
是程序在处理机上的一次执行过程,它是一个动态的概念。
是有一定生命期的。
进程是暂时的。

注意:
同一个程序执行两次,就会在操作系统中出现两个进程
所以可以同时运行一个软件,分别做不同的事情也不会混乱。
比如可以打开两个Pycharm做不同的事

进程调度
要想多个进程交替运行,操作系统必须对这些进程进行调度
这个调度也不是随即进行的,而是需要遵循一定的法则
由此就有了进程的调度算法:
先来先服务调度算法
短作业优先调度算法
时间片轮转法
多级反馈队列


进程的并行和并发
并行是指两者同时执行,比如赛跑,两个人都在不停的往前跑
并发是指资源有限的情况下,两者交替轮流使用资源

并行与并发的区别:
并行是从微观上,也就是在一个精确的时间片刻,有不同的程序在执行,这就要求必须有多个处理器。
并发是从宏观上,在一个时间段上可以看出是同时执行的,比如一个服务器同时处理多个session。


在程序运行的过程中,由于被操作系统的调度算法控制,程序会进入几个状态:
就绪
运行
阻塞

举例说明什么是argv,什么是阻塞
import sys # Python解释器
print(sys.argv)
['G:/course_select/进程的概念.py']

argv指参数
sys.argv是Python解释器在运行的时候传递进来的参数
之所以这样说,是因为如果把该文件在cmd运行的时候
首先在cmd输入以下信息:
python G:/course_select/进程的概念.py
打印结果:['G:/course_select/进程的概念.py']
然后在cmd中切换路径到G盘,接着输入 python course_select/进程的概念.py
打印结果:['course_select/进程的概念.py']
接着,再在cmd中输入:python course_select/进程的概念.py 123 abc
打印结果:['course_select/进程的概念.py', '123', 'abc']

因此,以下程序不能在编辑器里运行,只能在cmd里面使用python运行本文件
然后要在后面加上alex sb,就像上面的 python course_select/进程的概念.py 123 abc 一样
if sys.argv[1] == "alex" and sys.argv[2] == "sb":
print("登录成功")
else:
print("登录失败")
exit()
print(666)

而如果使用input(),其实就是一种阻塞





同步、异步

同步:
形象的说,一件事的执行必须依赖另一件事的结束,强调的是顺序性
异步:
形象的说,两件事情可以同时进行

注意,和并行、并发没关系

阻塞:等待
非阻塞:不等待
主要是从程序(线程)等待消息通知时的状态角度来说的

同步阻塞
异步阻塞
同步非阻塞
异步非阻塞

猜你喜欢

转载自www.cnblogs.com/shawnhuang/p/10316781.html