Python中threading模块,聊聊线程(1)

Python中Threading模块,聊聊线程(1)

线程出现的原因

​ 解决高并发下,资源有限的问题。

​ 因为如果没有线程,只有进程,那么进程之间对资源是争夺关系。

​ 而在一个进程中的多个线程是共享资源的。

什么是线程

  1. 轻量级的,是对进程的进一步微观,也被称为轻量进程。
  2. 一条线程只负责执行代码。
  3. 线程是计算机中被cpu调度的最小单位。
  4. 计算机中cpu都是执行线程中的代码。

线程与进程之间的关系

​ 每一个进程中都至少有一个线程在工作。

进程是操作系统中最小资源分配单元,线程是独立调度和分派的基本单位。

线程的特点

​ 在多线程的操作系统中,通常是在一个进程中包括多个线程,每个线程都是作为利用CPU的基本单位,是花费最小开销的实体。线程具有以下特点。

1)轻型实体
​ 线程中的实体基本上不拥有系统资源,只是有一点必不可少的、能保证独立运行的资源。
​ 线程的实体包括程序、数据和TCB。线程是动态概念,它的动态特性由线程控制块TCB(Thread Control Block)描述。

2)独立调度和分派的基本单位。
​ 在多线程OS中,线程是能独立运行的基本单位,因而也是独立调度和分派的基本单位。由于线程很"轻”,故线程的切换非常迅速且开销小(在同一进程中的)。

3)共享进程资源。
​ 线程在同一进程中的各个线程,都可以共享该进程所拥有的资源,这首先表现在:所有线程都具有相同的进程id,这意味着,线程可以访问该进程的每一个内存资源;此外,还可以访问进程所拥有的已打开文件、时器、信号量机构等。由于同一个进程内的线程共享内存和文件,所以线程之间互相通信不必调用内核。

4)可并发执行。
在一个进程中的多个线程之间,可以并发执行,甚至允许在一个进程中所有线程都能并发执行;同样,不同进程中的线程也能并发执行,充分利用和发挥了处理机与外围设备并行工作的能力。

应用场景解释

​ 你打开一个QQ聊天软件应用程序,就会开启一个进程。当你打开一个聊天窗口与一个人聊天的时候,就会开启一个线程(这个你自己可以测试一下,在任务管理器找到QQ),ok,那么你是不是可以再打开一个窗口与另外一个人聊天,在一个进程中同时干两个事情,这就是在一个进程中开启了两个线程,这两个线程也可以并发执行,在同一个进程内的线程是合作的关系。

python 线程模块的选择

​ Python提供了几个用于多线程编程的模块,包括thread、threading和Queue等。thread和threading模块允许程序员创建和管理线程。thread模块提供了基本的线程和锁的支持,threading提供了更高级别、功能更强的线程管理的功能。
Queue模块允许用户创建一个可以用于多个线程之间共享数据的队列数据结构。
避免使用thread模块,因为更高级别的threading模块更为先进,对线程的支持更为完善,而且使用thread模块里的属性有可能会与threading出现冲突;其次低级别的thread模块的同步原语很少(实际上只有一个),而threading模块则有很多;再者,thread模块中当主线程结束时,所有的线程都会被强制结束掉,没有警吉也不会有正常的清除工作,至少threading模块能确保重要的子线程退出后进程才退出。
thread模块不支持守护线程,当主线程退出时,所有的子线程不论它们是否还在工作,都会被强行退出。而threading模块支持守护线程,守护线程一般是一个等待客户请求的服务器,如果没有客户提出请求它就在那等着,如果设定一个线程为守护线程,就表示这个线程是不重要的,在进程退出的时候,不用等待这个线程退出。
​ multiprocess模块(python操作进程的模块,后期也会对其总结)完全模仿了threading模块的接口,二者在使用层面,有很大的相似性,所以只要multiprocess模块学的好了,我们在学习线程模块threading时候也就游刃有余了。

值得注意的是python中在一个进程的多个线程是不可以并行执行的。

后面会持续更新线程在python中的使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值