Python 多任务 之 线程讲解

多任务?

简单的说, 就是操作系统可以同时运行多个任务, 实现多任务有多种方式: 线程, 进程, 协程

并行与并发的区别:

并发: 指的是任务数多余 CPU 核数, 通过操作系统的各种任务调度算法, 实现用多个任务"一起"执行

并行: 指的是任务数小于等于 CPU 核数, 即任务真的是一起执行的

Re: 真的多任务叫并行, 假的多任务叫并发

线程概述:

简单的理解为同一进程中有多个计数器, 每个线程的执行时间不确定, 而每个进程的时间片相等, 线程是操作系统调度执行的最小单位

线程的创建步骤:

import threading

# 创建一个线程对象
t1 = threading.Thread(target=func_name1, args=(num,), name='子线程的名字')
t2 = threading.Thread(target=func_name2, args=(num,), name='子线程的名字')
......

# 创建一个线程并启动
t1.start()
t2.start()

# 等待子线程执行完毕之后再继续往下执行主线程
t1.join()

Re: 主线程 默认等待子线程结束之后才会结束

设置守护主线程目的:主线程退出子线程也销毁,主线程一死, 子线程也会死(默认不会), 线程的调度是随机的, 并没有先后顺序; 其main函数内的都为主线程, 其他函数都为主线程的子线程

枚举函数 enumerate 的用法:

用于将一个可遍历的数组(如: 列表, 元组, 字典)组合为一个索引序列, 同时列出元素和元素的索引, 一般用在 for 循环中;  在线程中, 通过 threading.enumerate()也可以获取线程列

互斥锁的运用 ( 解决资源竞争 ):

由于多线程之间共享全局变量就会导致出现资源竞争的问题, 为了避免这种竞争出现, 利用互斥锁可以实现线程同步

运用方法如下:

import threading

# 创建锁
mutex = threading.Lock()

# 加锁
mutex.acquire()

# 解锁
mutex.release()

死锁:

在线程间共享多个资源的时候, 如果两个线程分别占有一部分资源并且同时等待对方的资源, 就会造成死锁

避免死锁:

1、程序设计时要尽量避免( 银行家算法 )

2、添加超时时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值