摘要:资源竞争互斥锁解决多线程可以共享全局变量,同时操作全局变量,可能会出现资源竞争的问题。可以用设置等待时间来避免线程的常用应用多任务聊天器,或者多个同时执行多线程是假的多任务。所以多线程比单线程性能上是有提升的,因为遇到阻塞会自动释放的。
线程
定义:一个程序运行起来之后,一定有个负责执行代码的东西,这个东西就叫线程。线程占用的资源比较少,操作系统调度的单位。
t = threading.Thread(target=dance) 创建线程实例 t.start() 启动线程,在这里会出现一个子线程
threading.enumerate() 打印当前所有线程,返回一个列表【】
总结:
完成多任务,需要用threading模块来创建多线程来实现,还可以用继承Thread类的形式来创建线程(里面必须定义run方法)。
可以查看正在运行的线程名称
主线程会在子线程均结束后才停止。
调用start后,会出现一个子线程。
资源竞争—互斥锁解决
多线程可以共享全局变量,同时操作全局变量,可能会出现资源竞争的问题。
互斥锁Lock的acquire,release可以解决资源竞争的问题。
死锁:两个线程互相等待对方释放资源时,就会造成死锁。可以用设置等待时间来避免
线程的常用应用:多任务聊天器,或者多个while true同时执行
多线程是假的多任务。
GIL:全局解释器锁,每个线程在执行的过程中均需要先获取到GIL,保证同一时刻只有一个线程可以执行代码。
python和GIL锁没有半毛钱关系,是历史原因cpython解释器造成的,cpython无法移出GIL锁
python释放GIL的情况,在io操作时,是可以暂时释放的,然后在执行完毕后,必须重新获取gil。所以多线程比单线程性能上是有提升的,因为遇到io阻塞会自动释放GIL的。
python使用多进程是可以利用多核的cup资源。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/43577.html
摘要:一个进程可以拥有多个线程,一个线程必须有一个父进程。线程是独立运行的,它并不知道进程中是否还有其他的线程存在。线程的调度和管理由进程本身负责完成。因此多线程实现多任务并发比多线程的效率高。 一个任务通常就是一个程序,每个运行中的程序就是一个进程。当一个程序运行时,内部可能包含了多个顺序执行流,每个顺序执行流就是一个线程。 进程 定义: 当一个程序进入内存运行时,即变成一个进程。...
摘要:线程池可以用来解决处理一个特定请求最大线程数量限制问题。安抚多岁的发发发线程池的作用线程池作用就是限制系统中执行线程的数量。若队列中没有等待进程,线程池的这一资源处于等待。此线程池支持定时以及周期性执行任务的需求。 前言 面试中我们经常会遇到多线程和线程池的问题,究竟如何回答呢?今天关于Java中的线程池,我们就来学习一下。 什么是线程池 线程池是指在初始化一个多线程应用程序过程中创建...
摘要:线程池可以用来解决处理一个特定请求最大线程数量限制问题。安抚多岁的发发发线程池的作用线程池作用就是限制系统中执行线程的数量。若队列中没有等待进程,线程池的这一资源处于等待。此线程池支持定时以及周期性执行任务的需求。 前言 面试中我们经常会遇到多线程和线程池的问题,究竟如何回答呢?今天关于Java中的线程池,我们就来学习一下。 什么是线程池 线程池是指在初始化一个多线程应用程序过程中创建...
阅读 2043·2023-04-25 19:15
阅读 2205·2021-11-23 09:51
阅读 1220·2021-11-17 09:33
阅读 2134·2021-08-26 14:15
阅读 2451·2019-08-30 15:54
阅读 1563·2019-08-30 15:54
阅读 2152·2019-08-30 12:50
阅读 1116·2019-08-29 17:08