关于并发与并行, 前不久刚好真实发生. 同事一行人去 Family Mart 买午餐, 拿回来公司只有一个微波炉加热, 在 Family Mart 有两个微波炉可以加热. 也就是说, 我们一行人一起去买午餐这是一个并发的程序, 然后在 Family Mart 可以并行加热, 但是, 如果拿回公司的话... ...
分类:
编程语言 时间:
2019-09-28 10:57:59
阅读次数:
90
GIL(全局解释器锁) GIL锁即全局解释器锁,是 CPython 解释器的特性。它的作用是保证了同一时刻只有一个线程执行 Python 字节码。 它并不是 Python 的特性,它的存在是 CPython 的内存管理机制导致的。语言的内存管理机制一般有两种:1.引用计数 2.垃圾回收。CPytho ...
分类:
编程语言 时间:
2019-09-24 10:28:46
阅读次数:
81
一、GIL全局解释器锁 cpython中自带的GIL全局解释器,GIL本身就是一把互斥锁 重点: 其实就算我们在程序中写了一个线程的并行操作,实际上GIL会因为垃圾回收机制的问题,操作系统调度的问题,会把并行的线程还是变成了串行,这正是这个GIL全局解释器锁导致了同一进程的同一时刻只有一个线程在运行 ...
分类:
其他好文 时间:
2019-09-22 22:04:41
阅读次数:
127
GIL是什么 Python的代码执行由 Python虚拟机(也叫解释器主循环,CPython版本)来控制,Python在设计之初就考虑到在解释器的主循环中,同时只有一个线程在运行。即每个CPU在任意时刻只有一个线程在解释器中运行。对 Python虚拟机访问的控制由全局解释锁GIL控制,正是这个锁来控 ...
分类:
编程语言 时间:
2019-09-20 16:47:13
阅读次数:
74
[toc] 线程同步锁、死锁、递归锁、信号量、GIL 一、同步锁 所有线程同一时间读写同一个数据,有的线程已经对数据进行修改了,造成有的线程拿到的数据时旧的数据,而不是修改后的数据,造成结果不正确,于是引入了同步锁解决问题, 同步锁的原理是同一时间只能有一个线程读写数据。 锁通常被用来实现对共享资源 ...
分类:
编程语言 时间:
2019-09-19 01:24:35
阅读次数:
94
线程锁 531388 我们讲过的进程有进程锁,那么线程也有线程锁,先看上面代码,我们知道线程共享一个进程的空间,所以他们都对x进行增加操作,按道理来说,最后打印的结果应该是600000,而这里却远远不到,这是因为线程在进行长时间的操作时,cup切到下一个线程了,而这个时候可能x=1000+1,只执行 ...
分类:
编程语言 时间:
2019-09-18 20:56:50
阅读次数:
128
python 代码的执行由python虚拟机来控制,虚拟机访问由GIL控制,保证其同一时刻只有一条线程运行。 虽然python能运行多线程,但是因为GIL所以同一时刻只有一条线程在python解释器运行。 多线程下python虚拟机按以下方式执行: 1. 设置GIL 2. 切换到一条线程去运行 3. ...
分类:
编程语言 时间:
2019-09-13 15:26:25
阅读次数:
73
什么是GIL? GIL全称是Global Interpreter Lock,是python最常见的解释器CPython引入的一个概念。GIL是为了避免多个线程(threads)同时执行。因为CPython的内存管理并不是线程安全的,所以这个锁的存在是有必要的,短时间也是无法移除的。 GIL是一把全局 ...
分类:
其他好文 时间:
2019-09-09 23:04:48
阅读次数:
198
占用的资源:进程>线程>协程进程:先加载程序A的上下文,然后开始执行A,保存程序A的上下文,调入下一个要执行的程序B的程序上下文,然后开始执行B,保存程序B的上下文进程的颗粒度太大,每次都要有上下的调入,保存,调出。线程:一个软件的执行不可能是一条逻辑执行的,必定有多个分支和多个程序段,就好比要实现... ...
分类:
编程语言 时间:
2019-09-07 12:38:22
阅读次数:
100
TCP 协议下的 socket 通信 TCP UDP 的区别 三次握手 四次挥手 七层协议 粘包 (方案) 什么是进程 , 什么是线程 二者的区别 阻塞 和非阻塞 守护进程和守护线程的区别 GIL 锁(重点) 为什么在有 GIL 锁的情况下,还要使用普通锁 SQL 语句 事务四大特性 pymysql ...
分类:
数据库 时间:
2019-09-03 22:34:28
阅读次数:
147