多任务(进程、线程)

文章介绍了vim编辑器的基本操作模式,接着讨论了多任务的概念,包括并发和并行的区别。重点讲述了多进程的实现,包括创建子进程、获取进程编号和名字、传递参数以及进程间的资源隔离。此外,提到了多线程的特点,如线程共享全局变量和线程的无序执行,并指出了解决线程间共享全局变量问题的方法——使用互斥锁,同时强调了避免死锁的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 vim编辑器

​ 一开始进入是

​ 命令模式 i ==> 编辑模式 esc ==> 命令模式

​ 命令模式 : ==> 末行模式 esc ==> 命令模式

  • 安装命令: sudo apt-get install

  • 卸载命令: sudo apt-get remove

2 多任务

​ 多任务: 在同一时间内执行多个任务

​ 多任务的目的: 多任务的最大好处是充分利用CPU资源,提高程序的执行效率

2.1 并发:

​ 在一段时间内交替去执行多个任务(只有一个cpu)

2.2 并行

​ 在同一时刻执行多个任务(多核cpu)

3 多进程(多任务的实现方式)

  • 进程: 在<运行>程序就是进程

  • 进程: 分配资源的最小单位

  • 线程: 使用资源的最小单位

3.1 多进程的使用流程
  1. 导入模块(multiprocesing)
  2. 创建子进程(Process)
  3. 开启子进程(start)
3.2 进程编号

目的: 知道子进程是由哪个主进程创建的(子进程需要主进程回收资源)

os.getpid() 表示获取当前进程编号

os.getppid() 表示获取当前父进程编号

3.3 获取进程名字
  1. 进程起名字

​ my_dance = multiprocessing.Process(target=dance, name=“老王”)

  1. 获取进程的名字

​ multiprocessing.current_process()

3.4 执行带有参数的任务
#带有参数的函数:
		args:   元组!!!(单个元素的元组有 , )
		my_dance = multiprocessing.Process(target=dance, args=(5,))
		
		kwargs: 字典!!!(key值要和函数中的形参完全重名)
		my_dance = multiprocessing.Process(target=dance, kwargs={"count": 5})
3.5 多进程的注意点
  1. 进程是分配资源的最小单位==> 每个进程(主进程 子进程)都会有自己的独立的空间

结论: 进程之间不共享全局变量

  1. 主进程默认会等待子进程结束之后再结束
  • 若想让子进程随着主进程的结束而结束,可用下面两个方法:

​ (1) 守护进程(在start之前设置)

my_func.daemon = True

​ (2) 手动结束子进程

my_func.terminate()

4 多线程(多任务实现的方式)

4.1 进程和线程的从属关系

​线程是使用资源的最小单位 ==> 依附于进程

4.2 多线程的使用
  1. import threading
  2. threading.Thread(target=dance)
  3. start()
4.3 多线程的注意点
  1. 线程之间是无序执行的
  2. 主线程会等待子线程的结束而结束

可设置守护线程

​ (1) Thread(target=func, daemon=True)

​ (2) my_func.setDaemon(True)

  1. 线程之间共享全局变量

结论:由于线程是依附于进程的, 一个进程中的所有的线程都是使用的同一片内存空间 ; 一个进程中的线程是共享全局变量的;


4. 线程间共享全局变量问题
​ 解决方法2中
(1) join
(2)互斥锁:
对共享数据进行锁定,保证同一时刻只能有一个线程去操作

  • 互斥锁的使用
# 1 创建锁
	mutex = threading.Lock()
# 2 上锁
	mutex.acquire()
# 3 释放锁
	mutex.release()
	

注意: 要避免死锁,且同一把锁只有解锁了以后才可以再上锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值