当前位置:网站首页>多任务编程
多任务编程
2022-07-26 00:05:00 【Ding Jiaxiong】
3. 多任务编程
文章目录
多任务是指在同一时间内执行多个任务,例如: 现在电脑安装的操作系统都是多任务操作系统,可以同时运行着多个软件
3.1 多任务执行方式
3.1.1 并发
- 在一段时间内交替去执行任务。
3.1.2 并行
- 对于多核cpu处理多任务,操作系统会给cpu的每个内核安排一个执行的软件
- 多个内核是真正的一起执行软件。这里需要注意多核cpu是并行的执行多任务,始终有多个软件一起执行
3.2 进程
一个正在运行的程序或者软件就是一个进程,它是操作系统进行资源分配的基本单位
一个程序运行后至少有一个进程,一个进程默认有一个线程,进程里面可以创建多个线程,线程是依附在进程里面的,没有进程就没有线程
多进程可以完成多任务
3.2.1 多进程的使用
进程包
- multiprocessing
Process进程类的说明 Process([group [, target [, name [, args [, kwargs]]]]])
- group:指定进程组,目前只能使用None
- target:执行的目标任务名
- name:进程名字
- args:以元组方式给执行任务传参
- kwargs:以字典方式给执行任务传参
Process创建的实例对象的常用方法
- start():启动子进程实例(创建子进程)
- join():等待子进程执行结束
- terminate():不管任务是否完成,立即终止子进程
3.2.2 获取进程编号
- 获取当前进程编号 os.getpid()
- 获取当前父进程编号 os.getppid()
- 获取进程编号可以查看父子进程的关系
3.2.3 进程执行带有参数的任务
args参数
元组
- 元组方式传参一定要和参数的顺序保持一致。
kwargs参数
字典
- 字典方式传参字典中的key一定要和参数名保持一致。
3.2.4 注意点
进程之间不共享全局变量
- 创建子进程会对主进程资源进行拷贝,也就是说子进程是主进程的一个副本,好比是一对双胞胎,之所以进程之间不共享全局变量,是因为操作的不是同一个进程里面的全局变量,只不过不同进程里面的全局变量名字相同而已。
主进程会等待所有的子进程执行结束再结束
如何让主进程退出子进程销毁,不让主进程再等待子进程去执行
守护主进程
- 子进程对象.daemon = True
销毁子进程方式
- 子进程对象.terminate()
进程之间执行也是无序的
- 由操作系统调度决定
3.3 线程
线程是cpu调度的基本单位,每个进程至少都有一个线程,而这个线程就是我们通常说的主线程
多线程也可以完成多任务
3.3.1 多线程的使用
线程模块
- threading
线程类Thread参数说明
Thread([group [, target [, name [, args [, kwargs]]]]])
- group: 线程组,目前只能使用None
- target: 执行的目标任务名
- args: 以元组的方式给执行任务传参
- kwargs: 以字典方式给执行任务传参
- name: 线程名,一般不用设置
sub_thread = threading.Thread(target=任务名)
启动线程
- start方法
3.3.2 线程执行带有参数的任务
args参数
- 元组方式传参一定要和参数的顺序保持一致。
kwargs参数
- 字典方式传参字典中的key一定要和参数名保持一致。
3.3.3 注意点
线程之间执行是无序的
- 由cpu调度决定
主线程会等待所有的子线程执行结束再结束
如何让主线程退出子线程销毁,不让主线程再等待子线程去执行
守护主线程
- threading.Thread(target=show_info, daemon=True)
- 程对象.setDaemon(True)
线程之间共享全局变量
程之间共享全局变量数据出现错误问题
解决办法: 线程同步
线程等待 join()
- th1.start()
th1.join()
th2.start()
- th1.start()
互斥锁
3.4 互斥锁
对共享数据进行锁定,保证同一时刻只能有一个线程去操作
3.4.1 使用
创建锁
- mutex = threading.Lock()
上锁
- mutex.acquire()
开锁(解放锁)
- mutex.release()
3.4.2 注意点
- acquire和release方法之间的代码同一时刻只能有一个线程去操作
- 如果在调用acquire方法的时候 其他线程已经使用了这个互斥锁,那么此时acquire方法会堵塞,直到这个互斥锁释放后才能再次上锁
加上互斥锁多任务瞬间变成单任务,性能会下降,也就是说同一时刻只能有一个线程去执行
3.5 死锁
一直等待对方释放锁的情景就是死锁
结果
- 会造成应用程序的停止响应,不能再处理其它任务
3.5.1 避免死锁
- 要在合适的地方释放锁
3.6 进程和线程对比
3.6.1 关系对比
- 线程是依附在进程里面的,没有进程就没有线程。
- 一个进程默认提供一条线程,进程可以创建多个线程。
3.6.2 区别对比
- 进程之间不共享全局变量
- 线程之间共享全局变量,但是要注意资源竞争的问题,解决办法: 互斥锁或者线程同步
- 创建进程的资源开销要比创建线程的资源开销要大
- 进程是操作系统资源分配的基本单位,线程是CPU调度的基本单位
- 线程不能够独立执行,必须依存在进程中
- 多进程开发比单进程多线程开发稳定性要强
3.6.3 优缺点对比
- 进程优缺点:
优点:可以用多核
缺点:资源开销大 - 线程优缺点:
优点:资源开销小
缺点:不能使用多核
边栏推荐
- 获得JD商品详情原数据 API
- "Demons dance", is the bull market over? 2021-05-13
- Binary tree - 530. Minimum absolute difference of binary search tree
- Prometheus operation and maintenance tool promtool (II) query function
- 34 use of sparksql custom functions, architecture and calculation process of sparkstreaming, dstream conversion operation, and processing of sparkstreaming docking Kafka and offset
- 京东按关键字搜索商品 API 的使用说明
- matlab实时作出串口输出数据的图像
- MySQL 索引使用有哪些注意事项呢?(从六个方面回答)
- Are you still using your browser's own bookmarks? This bookmark plugin is awesome
- Under inflation, how to operate in the future? 2021-05-14
猜你喜欢

Unity -- Euler angle, quaternion

Binary tree - 404. Sum of left leaves

C语言实战之猜拳游戏

J9 number theory: what is Dao mode? Obstacles to the development of Dao

The GUI interface of yolov3 (simple, image detection)

Observer model of behavioral model

NVIDIA cudnn learning

Binary tree -- 111. Minimum depth of binary tree

Js理解之路:Object.call与Object.create()实现继承的原理

What does it mean that the web server stops responding?
随机推荐
STM32 serial port
二叉树相关知识
Observer model of behavioral model
How long can this bull market last Answers to questions 2021-05-11
Pytoch learning record (I): introduction to pytoch
BOM browser object model
二叉树——110. 平衡二叉树
安全文档归档软件
Binary tree -- 257. All paths of binary tree
用了MQ消息中间件后,我开始后悔了...
Android solves the risk of database injection vulnerability
How does the server build a virtual host?
C语言实战之猜拳游戏
Getaverse, a distant bridge to Web3
Security document archiving software
Binary tree 101. Symmetric binary tree
Stm32- analyze latency based on assembly
NVIDIA cudnn learning
SHIB(柴犬币)一月涨幅数百倍,百倍币需具备哪些核心要素?2021-05-09
Binary tree related knowledge