GIL和copy
GIL: Global Interpreter Lock 全局解释器锁 多任务执行占CPU
多任务占用CPU的资源消耗:进程>线程>协程
在cpython解释器中只有进程是真的多任务,线程和协程都是假的多任务 什么是全局解释器锁
在cpython解释器中,用多线程做多任务的事情,在全局有一个互斥锁在同一时刻只能允许一个线程在执行任务,其他线程排队等待获取锁, 如何解决GIL在cpython解释器中带来的问题
.根据程序的类型
计算密集型:进程,算法
IO密集型(input output):线程、协程
.换解释器
eg:
jpython
.换语言
因为python是一种解释性的语言,他可以兼容好多语言和平台
eg:
c语言,C++,C#,java
深浅拷贝: 深拷贝:拷贝一个内容,会拷贝所有信息. deepcopy()
浅拷贝:拷贝一个内容,只拷贝引用(引用地址中的数据). copy()
list:
深拷贝:
deepcopy() 拷贝所有数据
浅拷贝:
copy() 只拷贝引用地址,并没有拷贝内容 import copy a = [, ]
b = [, ]
c = [a, b]
d = copy.copy(c)
e = copy.deepcopy(c) print(id(c[]))
print(id(d[]))
print(id(e[])) tuple:
普通元祖
深拷贝:deepcopy
浅拷贝:copy()
deepcopy()和copy()都只拷贝引用地址中的数据
元祖中是可变类型时:
深拷贝:
deepcopy() 拷贝所有数据
浅拷贝:
copy() 只拷贝引用地址中的数据 tuple()
a = (, )
b = (, )
c = (a, b)
d = copy.copy(c)
e = copy.deepcopy(c)
print(id(c))
print(id(d))
print(id(e)) +++++++++++ a = [, ]
b = [, ]
c = (a, b)
d = copy.copy(c)
e = copy.deepcopy(c)
a.append()
print(id(c[]))
print(id(d[]))
print(id(e[]))
print(c)
print(d)
print(e)
其他数据类型基本都是浅拷贝如: int float str
GIL和copy的更多相关文章
- HEC-ResSim原文档
HEC-ResSim Reservoir System Simulation User's Manual Version 3.1 May 201 ...
- GIL/Copy/私有/面向对象
1. GIL Python语言和GIL没有关系.仅仅是由于历史原因在Cpython虚拟机(解释器),难以移除GIL. GIL:全局解释器锁.每个线程在执行的过程都需要先获取GIL,保证同一时刻只有一个 ...
- Python 第八篇:异常处理、Socket语法、SocketServer实现多并发、进程和线程、线程锁、GIL、Event、信号量、进程间通讯
本节内容: 异常处理.Socket语法.SocketServer实现多并发.进程和线程.线程锁.GIL.Event.信号量.进程间通讯.生产者消费者模型.队列Queue.multiprocess实例 ...
- 33、线程与全局解释器锁(GIL)
之前我们学了很多进程间的通信,多进程并发等等,今天我们来学习线程,线程和进程是什么关系,进程和线程有什么相同而又有什么不同今天就来揭晓这个答案. 一.线程概论 1.何为线程 每个进程有一个地址空间,而 ...
- 进程,线程,GIL,Python多线程,生产者消费者模型都是什么鬼
1. 操作系统基本知识,进程,线程 CPU是计算机的核心,承担了所有的计算任务: 操作系统是计算机的管理者,它负责任务的调度.资源的分配和管理,统领整个计算机硬件:那么操作系统是如何进行任务调度的呢? ...
- Python GIL锁
GIL全局解释器锁:为了解决多线程修改同一块数据. python的线程是调用操作系统的源生线程,启动时就是调用C语言的C源生接口,python调用C语言接口的线程去执行任务时,必须上下文对应关系传给C ...
- Python GIL 系列之再谈Python的GIL
1. 之前写过一篇<通过实例认识Python的GIL>的文章,感觉有些意犹未尽 2. 这次对例子作了些扩展,进一步的分析GIL对Python程序的影响 2.1 先来看例子: [python ...
- python中GIL和线程与进程
线程与全局解释器锁(GIL) 一.线程概论 1.何为线程 每个进程有一个地址空间,而且默认就有一个控制线程.如果把一个进程比喻为一个车间的工作过程那么线程就是车间里的一个一个流水线. 进程只是用来把资 ...
- 线程、进程、daemon、GIL锁、线程锁、递归锁、信号量、计时器、事件、队列、多进程
# 本文代码基于Python3 什么是进程? 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行 ...
随机推荐
- C++十进制到任意进制
#include<stdio.h> #include<string.h> #include<math.h> #include<iostream> #in ...
- CentOS7下如何正确安装并启动Docker(图文详解)
我使用了CentOS 7操作系统,可以非常容易地安装Docker环境.假设,下面我们都是用root用户进行操作,执行如下命令进行准备工作: yum install -y yum-utils yum-c ...
- IDEA代码注释<斜体>的解决方法
打开设置 将上图的checkbox取消勾选即可.
- Spring Boot整合Spring Batch
引言 Spring Batch是处理大量数据操作的一个框架,主要用来读取大量数据,然后进行一定的处理后输出指定的形式.比如我们可以将csv文件中的数据(数据量几百万甚至几千万都是没问题的)批处理插入保 ...
- poj1190 生日蛋糕
题意: 要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri, 高度为Hi的圆柱.当i < M时,要求Ri > ...
- VS2013编译libjpeg库
第一步:找到刚刚解压出来的“jpeg-9a”文件夹下面的“makefile.vc”文件,用记事本或Notepad++等编辑工具打开,然后找到里面的“!include <win32.mak> ...
- 开始bootstrap的学习
终于过完双十一,服务器顶住了压力,不知道为啥,突然的轻松,反而感觉有点无所适从,好久没写博客了,竟然发现还有人回我,很是开心,问题都是关于阿里云的,阿里云的吭确实多,其实关键在于,官方文档还是少,出了 ...
- 最新版kubernetesV1.14.1集群一键自动部署脚本
部署命令如下:详情及注意事项请看README.md git clone https://github.com/luckman666/deploy_Kubernetes-v1.14.1.git cd d ...
- python中的格式化字符
python中的格式化字符在python中我们会遇到一个问题,问题是如何输出格式化的字符串.我们经常会输出类似'亲爱的xxx你好!你xx月的话费是xx,余额是xx'之类的字符串,而xxx的内容都是根据 ...
- FPGA内部RAM的初始化
Altera的RAM初始化文件格式是mif和hex. QuartusII自带的RAM初始化工具很方便产生初始化文件. Xilinx的RAM初始化文件格式是coe, 在vivado中软件会将coe文件变 ...