• 线程2


    全局解释器

    GIL:本质就是一把互斥锁,既然是互斥锁,所有互斥锁的本质都一样,都是将并发运行变成串行,
      以此来控制同一时间内共享数据只能被一个任务所修改,进而保证数据安全。
    1 GIL:全局解释器锁
    GIL本质就是一把互斥锁,是夹在解释器身上的,
    同一个进程内的所有线程都需要先抢到GIL锁,才能执行解释器代码

    2、GIL的优缺点:
    优点:
    保证Cpython解释器内存管理的线程安全

    缺点:
    同一进程内所有的线程同一时刻只能有一个执行,
    也就说Cpython解释器的多线程无法实现并行

    python解释器
      对于IO密集型应该使用多线程
      对于计算密集型应该使用多进程
    线程互斥锁和GIL锁区别
      GIL:GIL保护的是解释器级的数据,保护用户自己的数据则需要自己加锁处理
      互斥锁是:
    互斥锁用于python文件运行进程(线程)时,使数据修改等操作的竞争变得有序化
    进程池,与线程池
    池子使用来限制并发的任务数目,限制我们的计算机在一个自己可承受的范围内去并发地执行任务p=ThreadPoolExecutor(任务个数)
    池子内什么时候装进程:并发的任务属于计算密集型
    池子内什么时候装线程:并发的任务属于IO密集型
    1、阻塞与非阻塞指的是程序的两种运行状态
      阻塞:遇到IO就发生阻塞,程序一旦遇到阻塞操作就会停在原地,并且立刻释放CPU资源
      非阻塞(就绪态或运行态):没有遇到IO操作,或者通过某种手段让程序即便是遇到IO操作也不会停在原地,
      执行其他操作,力求尽可能多的占有CPU

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

  • 相关阅读:
    PHP全部手册
    你必须收藏的GitHub技巧
    PV和并发
    api接口
    LeetCode 14. 最长公共前缀
    LeetCode 1037. 有效的回旋镖
    LeetCode 242. 有效的字母异位词
    LeetCode 151. 翻转字符串里的单词
    LeetCode 22. 括号生成
    LeetCode 面试题05. 替换空格
  • 原文地址:https://www.cnblogs.com/tianyu529/p/8964067.html
Copyright © 2020-2023  润新知