import time
from threading import Thread
from multiprocessing import Process
#计数的方式消耗系统资源 def two_hundred_million(): start_time = time.time() i = 0
for _ in range(200000000):
i = i +1 end_time = time.time() print("Total time:{}".format(end_time-start_time)) def one_hundred_million(): start_time = time.time() i = 0
for _ in range(100000000):
i = i +1 end_time = time.time() print("Total time:{}".format(end_time-start_time)) if __name__ == "__main__":
#单线程--主线程
# two_hundred_million()#Total time:15.068861722946167 #多线程
# for _ in range(2):
# t = Thread(target=one_hundred_million)
# t.start()
#Total time:16.740957498550415
#Total time:16.911967515945435 #使用多进程避免GIL的影响
'''
multiprocess库的出现在很大程度是为了弥补thread库,
因为GIL而低效率的缺陷,它完整的复制了一套thread提供的接口
方便迁移,唯一的不同就是它使用了多进程而不是多线程,每个进程有自己独立的GIL
因此不会出现进程之间的GIL争抢问题
'''
#多进程
for _ in range(2):
p = Process(target=one_hundred_million)
p.start()
#Total time:9.545545816421509
#Total time:9.60754942893982 #注意
'''
多进程的引入会增加程序实现时线程间数据通讯和同步的困难
计数器:
如果我们要使用多个线程累加同一变量,声明global变量,用thread.Lock()
thread.release()包住全局变量.多进程不能使用同一个全局变量,只能通过
Queue队列,put和get的方法来共享数据通讯.
这就会产生额外的成本,使编程变得更加复杂
''' #1.线程不常用,原因是底层有全局解释器锁
'''
python代码是由python虚拟机执行,(又叫解释器主循环),进行控制.
python在设计的时候是这样考虑的,在主循环中同时只能由一个控制线程在执行
就像单核CPU系统中的多进程一样,内存中可以有许多程序,但是在任意给定时刻,
只能有一个程序在运行.同理,尽管python解释器中可以运行多个线程,但是
在任意的给定时刻只有一个线程会被解释器执行
对python虚拟机的访问是由全局解释器锁(GIL)控制,这个锁就是用来保证
同时只能有一个线程在运行.
'''

21.线程,全局解释器锁(GIL)的更多相关文章

  1. python 线程队列、线程池、全局解释器锁GIL

    一.线程队列 队列特性:取一个值少一个,只能取一次,没有值的时候会阻塞,队列满了,也会阻塞 queue队列 :使用import queue,用法与进程Queue一样 queue is especial ...

  2. 全局解释器锁GIL & 线程锁

    1.GIL锁(Global Interpreter Lock) Python代码的执行由Python虚拟机(也叫解释器主循环)来控制.Python在设计之初就考虑到要在主循环中,同时只有一个线程在执行 ...

  3. python并发编程之线程(一):线程&守护线程&全局解释器锁

      一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性,因而不再详细介绍 官网链接:https://docs.pyth ...

  4. 全局解释器锁GIL

    我们使用高并发,一次是创建1万个线程去修改一个数并打印结果看现象: from threading import Thread import os def func(args): global n n ...

  5. python开发线程:线程&守护线程&全局解释器锁

    一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性,因而不再详细介绍 官网链接:https://docs.python ...

  6. python 什么是全局解释器锁GIL

    什么是全局解释器锁GIL Python代码的执行由Python 虚拟机(也叫解释器主循环,CPython版本)来控制,Python 在设计之初就考虑到要在解释器的主循环中,同时只有一个线程在执行,即在 ...

  7. 并发编程——全局解释器锁GIL

    1.全局解释器锁GIL GIL其实就是一把互斥锁(牺牲了效率但是保证了数据的安全). 线程是执行单位,但是不能直接运行,需要先拿到python解释器解释之后才能被cpu执行 同一时刻同一个进程内多个线 ...

  8. python 多线程编程之使用进程和全局解释器锁GIL

    本文主要介绍如何在python中使用线程. 全局解释器锁: python代码的执行是由python虚拟机(又名解释器主循环)进行控制的.python中,主循环中同时只能有一个控制线程在执行,就像单核C ...

  9. Python全局解释器锁 -- GIL

    首先强调背景: 1.GIL是什么?GIL的全称是Global Interpreter Lock(全局解释器锁),来源是python设计之初的考虑,为了数据安全所做的决定. 2.每个CPU在同一时间只能 ...

随机推荐

  1. LeetCode107. 二叉树的层次遍历 II

    107. 二叉树的层次遍历 II 描述 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 示例 例如,给定二叉树: [3,9,20,null ...

  2. Dynamic Mapping和常见字段类型

    原文:Dynamic Mapping和常见字段类型 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn. ...

  3. httplib模块:(一个相对底层的http请求模块)

    httplib是一个相对底层的http请求模块,期上有专门的包装模块,如urllib内建模块,goto第三方模块,但是封装的越高就约不灵活,比如urllib模块里的请求错误是就不会返回结果页的内容,只 ...

  4. JSP学习(1)

    JSP学习(1) 什么是Web应用程序 可以Web访问呢的应用程序,用户只需要浏览器即可访问 静态网页与动态网页 静态网页:网页中内容固定 动态网页:内容通过程序动态显示,自动更新 Java Web应 ...

  5. manjaro软件源报错 不停看到错误 "PackageName: signature from "User <email@archlinux.org>" is invalid" 的几种解决方法

    对于报错情况, 格式大致如下: error: PackageName: signature from "User <email@archlinux.org>" is i ...

  6. Linux性能优化从入门到实战:10 内存篇:如何利用Buffer和Cache优化程序的运行效率?

    缓存命中率   缓存命中率,是指直接通过缓存获取数据的请求次数,占所有数据请求次数的百分比,可以衡量缓存使用的好坏.命中率越高,表示使用缓存带来的收益越高,应用程序的性能也就越好.   实际上,缓存是 ...

  7. 【LeetCode】动态规划(下篇共39题)

    [600] Non-negative Integers without Consecutive Ones [629] K Inverse Pairs Array [638] Shopping Offe ...

  8. unixbench

    1.下载 https://github.com/kdlucas/byte-unixbench/archive/v5.1.3.tar.gz 2.修改Makefile 交叉编译 #CC=gccCC = a ...

  9. Java面向对象(二) 接口、多态和泛型

    一.接口 二.多态 多态是同一个行为具有多个不同表现形式或形态的能力. 2.1 类型转换 转换方式 隐式 向上转型 对于基本数据类型,存储容量低的可自动向存储容量高的类型转换 对于引用变量,子类可被转 ...

  10. js获取(URL)地址栏参数

      //获取地址栏参数 //url为空时为调用当前url地址 //调用方法为 var params = getPatams(); function getParams(url) { var theRe ...