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 什么是进程? 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行 ...
随机推荐
- div倾斜 文字不倾斜
- bzoj 5017 [Snoi2017]炸弹
题面 https://www.lydsy.com/JudgeOnline/problem.php?id=5017 题解 如果数据范围小一点那么就缩点 然后跑一个基础的DAG上的dp就好了 但是边数是$ ...
- UvaLive6439(string使用、回文串)
样例手写一写很容易发现规律(前后一样的串,则ans+=2),实现起来却忘了string的便捷性,其实根本用不到哈希. ; int n, ans; string s, t1, t2; int main( ...
- UVA - 11082 Matrix Decompressing
2. B - Matrix Decompressing 题意:定义一个R*C的正整数矩阵(1<=R,C<=20),设Ai为前i行所有元素之和,Bi为前i列所有元素之和. 题目已知R,C和数 ...
- [洛谷P2417]课程
题目链接: 点我 题目分析: 二分图最大匹配裸题,跑完匈牙利判断\(ans\)是否等于教室数即可 多组数据请注意初始化. 代码: #include<bits/stdc++.h> #defi ...
- magento 自定义url路径 和 filter data 小结
背景是往一个第三方的搜索插件里面加入filter功能. 首先是路径,插件自己定义了一个router,类似于cms.那首先说说router好了,从入口一路追查的话,会发现最后进入的是Mage_Core_ ...
- LN : leetcode 416 Partition Equal Subset Sum
lc 416 Partition Equal Subset Sum 416 Partition Equal Subset Sum Given a non-empty array containing ...
- 作用域链、this细说
一.作用域链 作用域:浏览器给js的一个生存环境(栈内存) 作用域链:js中的关键字var和function 都可以提前声明和定义,提前声明和定义的放在我们的内存地址(堆内存)中.然后js从上到下逐行 ...
- 洛谷 P1802 5倍经验日
题目背景 现在乐斗有活动了!每打一个人可以获得5倍经验!absi2011却无奈的看着那一些比他等级高的好友,想着能否把他们干掉.干掉能拿不少经验的. 题目描述 现在absi2011拿出了x个迷你装药物 ...
- CATransaction 知识
CATransaction 事务类,可以对多个layer的属性同时进行修改.它分隐式事务,和显式事务. 区分隐式动画和隐式事务:隐式动画通过隐式事务实现动画 . 区分显式动画和显式事务:显式动画有多种 ...