进程(multiprocess)、线程(threading)、协程

进程(process)

什么是进程

  • 进程是操作系统分配资源(CPU、内存等)的最小单元
  • 一个运行的程序就是一个进程,一个应用程序至少包括1个进程,而1个进程包裹1个或多个线程
  • 进程拥有自己的独立空间,因此进程之间数据不共享。
  • 进程运行是无序的

创建进程

1. 导入进程包
	import multiprocessing
2. 创建子进程并指定执行的任务
	process_name = multiprocessing.Process(target=任务名)
3.启动进程执行任务
	process_name.start()

获取进程编号

# 获取当前进程编号
	os.getpid()
# 获取当前进程名
	multiprocessing.current_process()
# 获取当前进程的父进程
	os.getppid()

进程传参

以元组形式传参
在这里插入图片描述
以字典方式传参
在这里插入图片描述

  • 元组方式传参(args): 元组方式传参一定要和参数的顺序保持一致。
  • 字典方式传参(kwargs):字典方式传参字典中的key一定要和参数名保持一致。

守护进程

主进程会等待所有的子进程执行结束再结束
设置守护主进程
在这里插入图片描述
主进程结束,子进程销毁
在这里插入图片描述

线程(thread)

什么是线程

  • 线程是操作系统调度的最小单元,不能独立存在,依赖进程
  • 一个进程可以由多个线程组成
  • 线程之间共享进程的所有资源
  • 线程运行是无序的

创建线程

1.导入线程模块
	import threading
2.创建子线程并指定执行的任务
	sub_thread = threading.Thread(target=任务名)
3.启动线程执行任务
	sub_thread.start()

线程传参

在这里插入图片描述
在这里插入图片描述

设置守护主线程

在这里插入图片描述

线程同步的方式

  1. 线程等待(join)
  2. 互斥锁
# 创建锁
	mutex = threading.Lock()
# 上锁
	mutex.acquire()
	
	...这里编写代码能保证同一时刻只能有一个线程去操作, 对共享数据进行锁定...
	
# 释放锁
	mutex.release()

进程线程区别对比

  • 进程之间不共享全局变量
  • 线程之间共享全局变量,但是要注意资源竞争的问题,解决办法: 互斥锁或者线程同步
  • 创建进程的资源开销要比创建线程的资源开销要大
  • 进程是操作系统资源分配的基本单位,线程是CPU调度的基本单位
  • 线程不能够独立执行,必须依存在进程中
  • 多进程开发比单进程多线程开发稳定性要强

优缺点对比

  • 进程优缺点:
    • 优点:可以用多核
    • 缺点:资源开销大
  • 线程优缺点:
    • 优点:资源开销小
    • 缺点:不能使用多核
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值