GIL
什么是GIL
全局解释器锁,本质是一把互斥锁,是加在cpython解释器上的一把锁,
同一个进程内的所有线程需要先抢到GIL锁,才能执行python代码

为什么要有GIL
cpython解释器的内存管理机制是非线程安全的

GIL与自定义互斥锁的区别:
相同:都是互斥锁
不同:GIL是加在解释器身上,全局的
自定义作用于局部
单进程内所有线程都会去抢GIL
局部线程会去抢自定义互斥锁

GIL的优缺点:
优点:保证了cpython解释器内存管理的线程安全
缺点:同一进程内的所有线程同一时刻内只有一个可以执行,不能并行线程

线程池,进程池
池:装固定数目的进程or线程
为什么要用:让机器在自己可承受的范围内去保证一个高效的工作
from concurrent.futures import ThreadPoolExecutor ,ProcessPoolExecutor
pool= ProcessPoolExecutor(4)
future = pool.submit(task,arg1,arg2...)是一种异步提交任务的方式
pool.shutdown()指的是不能再往进程池内提交任务,wait = True 等待进程池或线程池内所有的任务都运行完毕
future.result()获取结果,#异步提交任务,串行的获取结果

什么时候用多进程,什么时候用多线程:
单进程下的多个线程是无法并行,无法并行意味着不能利用多核优势
cpu干的是计算的活,多个cpu意味着提升了计算性能
cpu是无法做IO操作的,多个CPU在IO操作前毫无用处
当我们的程序是IO密集型时,多核对性能的提升微不足道,此时可使用多线程
当我们的程序是计算密集型时,一定要用上多核优势,可以使用多进程

阻塞与非阻塞:
阻塞:遇到IO就发生阻塞,程序一旦遇到阻塞操作就会停在原地,并且立即释放CPU资源
非阻塞(就绪或运行态):没有遇到IO操作,或者通过某种手段让程序即便是遇到IO也不会停在原地

同步与异步指的是提交任务的两种方式
同步调用:提交完任务后,就在原地等待,直到任务运行完毕后,拿到任务的返回值,才继续执行下一行代码
异步调用:提交完任务后,不在原地等待,直接直接下一行的代码

GIL 线程/进程池 同步异步的更多相关文章

  1. GIL全局解释器锁,线程池与进程池 同步异步,阻塞与非阻塞,异步回调

    GIL全局解释器锁 1.什么是GIL 官方解释:'''In CPython, the global interpreter lock, or GIL, is a mutex that prevents ...

  2. GIL 线程池 进程池 同步 异步 阻塞 非阻塞

    1.GIL 是一个全局解释器锁,是一种互斥锁 为什么需要GIL锁:因为一个python.exe进程中只有一份解释器,如果这个进程开启了多个线程都要执行代码 多线程之间要竞争解释器,一旦竞争就有可能出现 ...

  3. GIL 线程池 进程池 同步 异步

    1.GIL(理论 重点)2.线程池 进程池3.同步 异步 GIL 是一个全局解释器锁,是一个互斥锁 为了防止竞争解释器资源而产生的 为何需要gil:因为一个python.exe进程中只有一份解释器,如 ...

  4. 线程queue、线程进程池、异步回调机制

    1. 线程 queue queue is especially useful in threaded programming when information must be exchanged sa ...

  5. Python进阶----异步同步,阻塞非阻塞,线程池(进程池)的异步+回调机制实行并发, 线程队列(Queue, LifoQueue,PriorityQueue), 事件Event,线程的三个状态(就绪,挂起,运行) ,***协程概念,yield模拟并发(有缺陷),Greenlet模块(手动切换),Gevent(协程并发)

    Python进阶----异步同步,阻塞非阻塞,线程池(进程池)的异步+回调机制实行并发, 线程队列(Queue, LifoQueue,PriorityQueue), 事件Event,线程的三个状态(就 ...

  6. 4月27日 python学习总结 GIL、进程池、线程池、同步、异步、阻塞、非阻塞

    一.GIL:全局解释器锁 1 .GIL:全局解释器锁 GIL本质就是一把互斥锁,是夹在解释器身上的, 同一个进程内的所有线程都需要先抢到GIL锁,才能执行解释器代码 2.GIL的优缺点: 优点:  保 ...

  7. 并发编程 - 线程 - 1.线程queue/2.线程池进程池/3.异步调用与回调机制

    1.线程queue :会有锁 q=queue.Queue(3) q.get() q.put() 先进先出 队列后进先出 堆栈优先级队列 """先进先出 队列"& ...

  8. Python之路(第三十六篇)并发编程:进程、同步异步、阻塞非阻塞

    一.理论基础 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所有内容都是围绕进程的概念展开的. 即使可以利用的cpu只有一个(早期的 ...

  9. Python3 线程/进程池 concurrent.futures

    python3之concurrent.futures一个多线程多进程的直接对接模块,python3.2有线程池了 Python标准库为我们提供了threading和multiprocessing模块编 ...

随机推荐

  1. (动态规划)UVA-11400:Lighting System Design

    You are given the task to design a lighting system for a huge conference hall. After doing a lot of ...

  2. 洛谷P2514||bzoj2426 [HAOI2010]工厂选址

    洛谷P2514 bzoj2426 其实是个简单的贪心,然而不适合在脑子不清醒的时候做...看不懂题意续了1个小时 很容易发现应该枚举新建哪个发电厂,对于这种方案就是取其中b吨煤运到原来发电厂,取剩下( ...

  3. flask 学习app代码备份

    #!/usr/bin/python # -*- coding: UTF-8 -*- from flask import Flask, url_for from flask import request ...

  4. System.TypeInitializationException: 'The type initializer for 'MySql.Data.MySqlClient.Replication.ReplicationManager' threw an exception.'

    下午在调试的时候报错数据库连接就报错我就很纳闷后面用原来的代码写发现还是报错 System.TypeInitializationException: 'The type initializer for ...

  5. webpack(2)

    在普通页面中使用render函数渲染组件 render:function(createElements){//createElements是一个方法,调用它,能够把指定的组件模板,渲染成为HTML结构 ...

  6. hihocoder1776 序列

    思路: 考虑从左至右依次向每个位置放置数字,对于第i个位置,以i为结尾的i个前缀和模P是不能相等的(因为不存在和为P的倍数的子串),所以第i个位置只能放置P - i个不同的数字.则答案就是(P - 1 ...

  7. OutOfMemory

    查看图片格式,如果为PNG,可更改为jpg.图片会变小. 停止activity 当activity调用onStop()方法, activity不再可见,并且应该释放那些不再需要的所有资源.一旦acti ...

  8. Slacklining 2017/2/7

    原文 Proline Slacklining's expansion is still in process,but it already has a professional scene.Some ...

  9. Hibernate学习之简单应用

    前言:博主在学到Spring的时候,要开始做项目了,突然觉得好像有点虚,之前学过的Hibernate框架的简单应用好像又忘记了.所以返回来,做个小笔记. 简单来讲,Hibernate框架是利用对象-关 ...

  10. codeforces Gym 100338E Numbers (贪心,实现)

    题目:http://codeforces.com/gym/100338/attachments 贪心,每次枚举10的i次幂,除k后取余数r在用k-r补在10的幂上作为候选答案. #include< ...