首页 技术 正文
技术 2022年11月16日
0 收藏 787 点赞 4,392 浏览 894 个字

GIL
什么是GIL
全局解释器锁,本质是一把互斥锁,是加在cpython解释器上的一把锁,
同一个进程内的所有线程需要先抢到GIL锁,才能执行python代码

为什么要有GIL
cpython解释器的内存管理机制是非线程安全的

GIL与自定义互斥锁的区别:
相同:都是互斥锁
不同:GIL是加在解释器身上,全局的
自定义作用于局部
单进程内所有线程都会去抢GIL
局部线程会去抢自定义互斥锁

GIL的优缺点:
优点:保证了cpython解释器内存管理的线程安全
缺点:同一进程内的所有线程同一时刻内只有一个可以执行,不能并行线程

线程池,进程池
池:装固定数目的进程or线程
为什么要用:让机器在自己可承受的范围内去保证一个高效的工作
from concurrent.futures import ThreadPoolExecutor ,ProcessPoolExecutor
pool= ProcessPoolExecutor(4)
future = pool.submit(task,arg1,arg2…)是一种异步提交任务的方式
pool.shutdown()指的是不能再往进程池内提交任务,wait = True 等待进程池或线程池内所有的任务都运行完毕
future.result()获取结果,#异步提交任务,串行的获取结果

什么时候用多进程,什么时候用多线程:
单进程下的多个线程是无法并行,无法并行意味着不能利用多核优势
cpu干的是计算的活,多个cpu意味着提升了计算性能
cpu是无法做IO操作的,多个CPU在IO操作前毫无用处
当我们的程序是IO密集型时,多核对性能的提升微不足道,此时可使用多线程
当我们的程序是计算密集型时,一定要用上多核优势,可以使用多进程

阻塞与非阻塞:
阻塞:遇到IO就发生阻塞,程序一旦遇到阻塞操作就会停在原地,并且立即释放CPU资源
非阻塞(就绪或运行态):没有遇到IO操作,或者通过某种手段让程序即便是遇到IO也不会停在原地

同步与异步指的是提交任务的两种方式
同步调用:提交完任务后,就在原地等待,直到任务运行完毕后,拿到任务的返回值,才继续执行下一行代码
异步调用:提交完任务后,不在原地等待,直接直接下一行的代码

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,492
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,495
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,132
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,295