1.线程的产生
程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。计算机允许多个程序同时加载到内存中,在操作系统的调度下,可以实现并发地执行。这样的设计,大大提高了CPU的利用率。
进程可以提高计算机的利用率。但进程也存在一定的缺点, 比如:
1.进程在执行的过程中如果阻塞,例如等待输入,整个进程就会挂起,即使进程中有些工作不依赖于输入的数据,也将无法执行。
2.进程是资源分配的最小单元, 进程创建及销毁会增加时空开销, 多进程的引入就是为了并发的执行任务, 提高CPU的利用率, 然而多进程的创建, 切换, 销毁等操作增加时空开销, 并发性粒度较粗, 并发度不高.
进程的两项功能---分配系统资源 and 调度分派执行
将进程的两项功能进行分离, 前一项由进程来完成, 进程负责出面从系统索取资源, 让系统分配资源, 它不需要频繁的切换, 减小时空的消耗. 任务的处理交由线程来完成, cpu可以直接调度线程, 它作为系统调度的基本单位, 进行频繁的调度和切换, 线程的切换相对进程来说, 时空消耗较小, 线程可以看做是"轻型的进程".
(重要)注意: 进程是资源分配的最小单位, 线程时CPU调度的最小单位. 一个进程中至少有一个线程.
1.轻型实体
线程中的实体基本上不拥有系统资源,只是有一点必不可少的、能保证独立运行的资源。
2.独立调度和分派的基本单位。
线程是能独立运行的基本单位,因而也是独立调度和分派的基本单位。线程的切换非常迅速且开销小(在同一进程中的)。
3.共享进程资源。
在同一进程中的各个线程,都可以共享该进程所拥有的资源,这首先表现在:所有线程都具有相同的进程id,这意味着,线程可以访问该进程的每一个内存资源;此外,还可以访问进程所拥有的已打开文件、定时器、信号量机构等。由于同一个进程内的线程共享内存和文件,所以线程之间互相通信不必调用内核。
4.可并发执行。
在一个进程中的多个线程之间,可以并发执行,甚至允许在一个进程中所有线程都能并发执行;同样,不同进程中的线程也能并发执行,充分利用和发挥了处理机与外围设备并行工作的能力。
2.线程模块与线程的创建
thread和threading, thread是lowB一个, threading模块更加高级.
from threading import Thread
import time
def aoaobed(name):
time.sleep(2)
print('%s 起床啦!' %name)
if __name__ == '__main__':
t=Thread(target=aoaobed,args=('波鑫哥哥',))
t.start()
print('主线程')
from threading import Thread
import time
class AoaoBed(Thread):
def __init__(self,name):
super().__init__()
self.