文章目录
本篇开始分析Python中的并发程序,也就是进程、线程、协程序的使用。由于是用自己的语言总结的,因此比较大白话,或者叫通俗易懂。而且很多细节方面没有具体介绍,因为在Python进程管理中很少用到,这里主要分析的就是比较重要的点
基本概念
1、操作系统的本质
帮助我们控制硬件、管理软件的软件,对下提供了一个我们控制计算机的接口,对上帮助我们管理应用软件
2、早期的批处理系统
人机交互过程太多,太过浪费时间和资源,如下图:
3、解决批处理系统的问题
(1)SPOOLING技术
卡片被拿到机房后能够很快的将作业从卡片读入磁盘,于是任何时刻当一个作业结束时,操作系统就能将一个作业从磁带读出,装进空出啦的内存区域运行,这种技术叫做同时的外部设备联机操作:SPOOLING该技术同时用于输出。当采用了这种技术后,就不在需要IBM1401机了,也不必将磁带搬来搬去了(中间俩小人失业了),强化了操作系统的功能。
(2)多道程序设计,用于解决顺序执行的问题
在7094机上(程序运行的机器),若当前作业因等待磁带或等待其他IO操作而暂停,CPU就处于休闲状态直至IO操作完成,对于CPU密集的科学计算,IO操作少,浪费时间不明显,对于商业数据处理,IO等待能到达80%~90%,所以必须解决CPU浪费的现象。
4、分时操作系统
分时操作系统=多个联机终端+多道技术
由于许多程序员怀念第一代独享的计算机,可以即时调试自己的程序。为了满足程序员们很快可以得到响应,出现了分时操作系统。
20个客户端同时加载到内存,有17在思考,3个在运行,cpu就采用多道的方式处理内存中的这3个程序,由于客户提交的一般
都是简短的指令而且很少有耗时长的,索引计算机能够为许多用户提供快速的交互式服务,所有的用户都以为自己独享了计算机资源
5、进程的本质
(1)本质:一个程序在一个数据集上的一次动态执行过程
(2)电脑可以多个程序同时运行,如一边听着音乐,一边用QQ聊天;一个程序的运行可能有多个进程,如多个QQ同时在线,一个;我们在资源管理器里可以看到,某个软件有很多个进程。QQ进行多窗口聊天并截图。
(3)但其实它们并不是同时进行的,因为一个电脑只有一个CPU,而一个CPU不可能满足多个程序同时运行,之所以给我们看到它们是同时运行,是因为CPU处理速度太快了,可以达到纳秒(10的-9次方)级别,它运行程序时就可以瞬间切换,一会儿运行这个一会儿运行那个,当然,它们都是按照规则来运行。虽然一直在切换,由于速度特别快,因此给我们感觉是CPU在同时运行多个程序,一种并发效果。
(4)不过,虽然它能达到一种并发运行程序的效果,但是这也是有极限的,这就是为什么当我们运行的程序太多的时候就会出现卡顿的原因之一。到现在,我们已经有了双核、四核、八核CPU,就相当于有多个CPU同时转,让我们的电脑或手机更加流畅,说白了就是我们更加无法察觉出它运行程序的瞬间切换。
6、线程的本质
(1)本质:线程是进程的一个最小执行单元,进程之下有多个线程,一个进程至少有一个线程。
(2)如某个软件下有多个功能,而我们运行某一项功能就是打开一个线程,而该软件运行着,就是一个大的进程。如在QQ里面边聊天,同时接受邮件,同时使用截图。
(3)进程与线程的区别:进程是最小的资源单位,系统分配内存是分给进程的;线程是最小的执行单元,但不可能只有线程存在,因为它需要进程的资源这个前提。
threading线程模块
1、开三个线程
(1)参考代码:
import threading #导入线程模块
import time
def Hi(num):
print('hello python %d\n' %num)
time.sleep(3) #睡3秒
if __name__ == '__main__':
t1 = threading.Thread(target=Hi,args=(10,))
#实例化一个线程对象;传入一个函数名,不能加();再传入函数需要的参数到args中
t1.start() #启动一个线程对象
t1 = threading