• gil锁 线程队列 线程池


    python是一门编译形的,弱类型语言

    它的代码是由编译器一行行的翻译成计算机可以读懂的代码的.而且因为历史遗留问题.当时设计的时候,

    电脑都是单核的,python在执行中多线程中,只会利用到一个核心.并且一直没有合适的解决方案.所以导致它的运行效率相对比较慢.

    py文件被加载执行的顺序:首先是py文件会保存到磁盘中>>>开辟一个内存空间去执行py文件>>>内部执行中,py文件中的代码会串行

    通过gil锁,解释器再将它编译成计算机可以读懂的二进制代码>>>操作系统会调动CPU去执行这段代码.

    线程队列几种创建方法:

    (1)先进先出队列: q.queue.Queue(4) #后面的参数是限定队列的最大长度

    (2)先进后出队列:q.queue.LifoQueue(4)

    (3)优先级队列:q.queue.PriorityQueue(4) #根据ascii码进行排序

    q.put() 添加数据     q.get() 获取元素   q.qsize()获取队列大小  q.empty()为空返回True否者False

    queue.task_done()确保队列所有运算全部完成,完成一个给队列发射一个信号

    线程池存在的根本原因:

    在网络通信时,服务器接收到一个用户请求就会开辟一个线程空间,由该线程去执行任务.任务完成后,该线程退出.

    其中原理就是"及时创建,及时销毁"如果用户访问的过于频繁,那服务器就一直处于创建线程与销毁线程中的状态.

    线程池的出现正是着眼于减少线程池本身带来的开销。线程池采用预创建的技术,在应用程序启动之后,将立即

    创建一定数量的线程(N1),放入空闲队列 中。这些线程都是处于阻塞(Suspended)状态,不消耗CPU,但占用

    较小的内存空间。当任务到来后,缓冲池选择一个空闲线程,把任务传入此线程中运行。当N1个线程都在处理任务后,

    缓冲池自动创建一定数量的新线程,用于处理更多的任务。在任务执行完毕后线程也不退出,而是继续保持在池中等

    待下一次的任务。当系统比较空闲时,大部分线程都一直处于暂停状态,线程池自动销毁一部分线程,回收系统资源。

    线程池的创建的方法:

    from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor

    与之前学习的进程以及线程的使用方法基本一致

  • 相关阅读:
    吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:关闭图标
    吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:显示下拉式功能
    吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:显示关闭按钮
    【安卓手机通用】android adb shell 命令大全
    Exclusive access control to a processing resource
    Jquery一些常见性能的问题
    Jquery一些常见性能的问题
    Memcached的基础梳理
    Memcached的基础梳理
    Memcached的基础梳理
  • 原文地址:https://www.cnblogs.com/lowen107/p/10059273.html
Copyright © 2020-2023  润新知