线程
在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程,cpu真正的执行单位是线程,在工厂中,每个车间都有房子,而且每个车间默认就有一条流水线
操作系统===》工厂
进程===》车间
线程===》流水线
进程运行===》电源
相关知识点:
线程:cpu最小的执行单位
进程:资源集合/资源单位
线程运行=运行代码
进程运行=各种资源+线程
右键运行:
申请内存空间,先把解释器丢进去,并且把代码丢进去(进程做的),运行代码(线程)
进程和线程的区别
线程===》单指代码的执行过程
进程===》资源的申请与销毁的过程
特点:
进程内存空间彼此隔离,同一个进程下的线程共享资源
进程和线程的创建速度
进程需要申请资源开辟空间,慢
线程只是告诉操作系统一个执行方案,快
线程开启的两种方式之函数
from threading import Thread
import time
def task():
print('线程 start')
time.sleep(2)
print('线程 end')
if __name__ == '__main__':
t = Thread(target=task)
t.start() # 告诉操作系统开一个线程 .
print('主')
线程开启的两种方式之类
from threading import Thread
import time
# 进程等待所有线程结束才会结束
class Myt(Thread):
def run(self):
print('子线程 start')
time.sleep(5)
print('子线程 end')
t = Myt()
t.start()
print('主线程')
子线程vs子进程创建速度
from threading import Thread
from multiprocessing import Process
import time
def task(name):
print(f'{name} is running')
time.sleep(2)
print(f'{name} is end')
if __name__ == '__main__':
t = Thread(target=task,args=('子线程',))
p = Process(target=task,args=('子进程',))
# t.start()
p.start()
print('主')
'''
开启子线程的打印效果:
子线程 is running
主
子线程 is end
开启子进程打印效果:
主
子进程 is running
子进程 is end
'''
子线程共享资源
from threading import Thread
import time,os
x = 100
def task():
global x
x = 50
print(os.getpid()) # 5204
if __name__ == '__main__':
t = Thread(target=task)
t.start()
time.sleep(2)
print(x) # 50
print(os.getpid())
线程的join方法
from threading import Thread
import time
def task():
print('子线程 start')
time.sleep(2)
print('子线程 end')
t = Thread(target=task)
t.start()
t.join() # 等待子线程运行结束
print('主线程')