cpython 解释器中存在一个GIL(全局解释器锁),无论多少个线程、多少颗cpu

他的作用就是保证同一时刻只有一个线程可以执行代码,因此造成了我们使用多线程的时候无法实现并行。

因为有GIL的存在、所以同一时刻只能有一个线程被CPU执行

任务:IO 密集型:可以采用多线程(多进程+协成)

计算密集型:python不适用

(1)IO 密集型、CPU会是实现自动切换 提高工作效率

def ListenMusic(name):
print("beging listening to %s,%s" %(name,time.ctime()))
time.sleep(5)
print("end listening %s" % time.ctime())
def Recordlog(name):
print("beging recoding to %s,%s" %(name,time.ctime()))
time.sleep(5)
print("end recoding %s" % time.ctime())
if __name__ == '__main__':
threads=[]
t1=threading.Thread(target=ListenMusic,args=("凤凰传奇",))
t2=threading.Thread(target=Recordlog,args=("python多线程",))
threads.append(t1)
threads.append(t2)
for t in threads:
t.start()

(2) 计算密集型 cpu 一直处于工作状态、没有io流的切换、不适用多进程

import threading,time
def add():
s=0
for i in range(100000990):
s +=i
print("累加的结果是:",s)
def mul():
s1=1
for i in range(1,10000):
s1 *= i
print("累乘的结果是:",s1)
if __name__ == '__main__':
start= time.time()
L = []
t1=threading.Thread(target=add)
t2=threading.Thread(target=mul) L.append(t1)
L.append(t2)
for t in L:
t.start()
for t in L:
t.join()
print("总共花费时间",time.time()-start)

python GIL :全局解释器的更多相关文章

  1. Python自动化 【第九篇】:Python基础-线程、进程及python GIL全局解释器锁

    本节内容: 进程与线程区别 线程 a)  语法 b)  join c)  线程锁之Lock\Rlock\信号量 d)  将线程变为守护进程 e)  Event事件 f)   queue队列 g)  生 ...

  2. python GIL全局解释器锁,多线程多进程效率比较,进程池,协程,TCP服务端实现协程

    GIL全局解释器锁 ''' python解释器: - Cpython C语言 - Jpython java ... 1.GIL: 全局解释器锁 - 翻译: 在同一个进程下开启的多线程,同一时刻只能有一 ...

  3. python GIL全局解释器锁与互斥锁 目录

    python 并发编程 多线程 GIL全局解释器锁基本概念 python 并发编程 多线程 GIL与Lock python 并发编程 多线程 GIL与多线程

  4. Python GIL全局解释器锁

    '''在python原始解释器Cpython中存在GIL(Global Interpreter Lock,全局解释器锁),因此在执行Python代码 时,会产生互斥锁来限制线程对共享资源的访问,指导接 ...

  5. Python之路-python(paramiko,进程和线程的区别,GIL全局解释器锁,线程)

    一.paramiko 二.进程.与线程区别 三.python GIL全局解释器锁 四.线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生 ...

  6. 【转】进程、线程、 GIL全局解释器锁知识点整理

    转自:https://www.cnblogs.com/alex3714/articles/5230609.html 本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线 ...

  7. 网络编程-Python高级语法-GIL全局解释器锁

    知识点:GIL全局解释器锁其实和Python没有任何关系,是由于当初编写Python解释器时留下的,它只对多线程有影响,GIL保证同一时刻只有一个线程在运行,即使是多核配置电脑,同一时刻也只会让一个线 ...

  8. [Python 多线程] GIL全局解释器锁 (十三)

    Queue 标准库queue模块,提供FIFO(先进先出)的Queue.LIFO(后进先出)的队列.优先队列. Queue类是线程安全的,适用于多线程间安全的交换数据.内部使用了Lock和Condit ...

  9. Python 36 GIL全局解释器锁 、vs自定义互斥锁

    一:GIL全局解释器锁介绍 在CPython中,全局解释器锁(或GIL)是一个互斥锁, 它阻止多个本机线程同时执行Python字节码.译文:之所以需要这个锁, 主要是因为CPython的内存管理不是线 ...

随机推荐

  1. dlib的编译和安装

    之前写过python dlib依赖的安装,安装过程还算比较复杂,还需要安装boost.Python依赖等,但是如果纯粹的编译C++的dlib库,则要简单得多,基本上不需要其他外部的依赖,这里简单叙述一 ...

  2. idea 集成sonarLint检查代码bugs

    1.目标 idea集成sonar的代码检查,实现可以在提交代码前就检查你的代码,而不是将代码提交之后,之后再去检查. Sonar可以从以下七个维度检测代码质量,而作为开发人员至少需要处理前5种代码质量 ...

  3. Windows平台下nginx跨域配置

    1)下载地址: http://nginx.org 2)启动 解压至d:\nginx,运行nginx.exe(即nginx -c conf\nginx.conf),默认使用80端口,日志见文件夹D:\n ...

  4. Nginx——location匹配与在配置中的优先级

    1. location表达式类型 location ^~ /api/v7/ { proxy_next_upstream http_404 http_500 http_502 http_503 http ...

  5. 【Linux】常见公共DNS地址

    如果您是程序员.系统管理员或任何类型的 IT 工作者,那么您可能有自己最喜欢的用于故障排除的 IP 地址.而且你可能已经用了好几年了. 这些 ip 可用于: ping 测试连接 使用 dig 或 ns ...

  6. Jmeter执行python脚本函数使用说明

    一.下载地址插件百度网盘下载地址:https://pan.baidu.com/s/1SvJjyThsXYryXuEEg9rm3g提取码:q9hd 二.使用说明1.将下载的jmeter-function ...

  7. LNMP环境的搭建(yum)方法(精)

    第一 先安装nginx nginx在官方CentOS社区yum里面没有,需要在nginx的官方网站去下载yum的配置文件 官方:https://www.nginx.com/resources/wiki ...

  8. C#批量删除注释与空行

    代码发布时候有的时候需要删除代码注释与空行..方法如下 1.删除注释 方法: 第一步:打开vs2010,使用Ctrl+H快捷键,打开查询替换窗口 第二步:在‘查找选项’中,勾选‘使用’‘正则表达式’ ...

  9. eclipse下安装windowbuilder(一定要看)

    访问页面https://www.eclipse.org/windowbuilder/download.php,查看更新连接 这个是**连接地址**,要复制粘贴到eclipse里. !! 复制地址!!

  10. centos查看端口被哪个应用端口占用命令

    在linux一般使用netstat 来查看系统端口使用情况步. netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表.实际的网络连接以及每一个网络接口设备的      net ...