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
与之前学习的进程以及线程的使用方法基本一致