div id="myTime">

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

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

posted @ 2018-12-03 16:33  lowen107  阅读(107)  评论(0编辑  收藏  举报