python之-线程原理-开启线程两种方式,以及子进程与子线程pid的区别
1.什么是线程
进程其实不是个执行单位,进程是一个资源单位,每个进程内自带一个线程,线程才是cpu上的执行单位
如果把操作系统比喻成为一座工程
在工厂内每造出一个车间---》启动一个进程
每个车间内至少有一条流水线---》每个进程内至少有一个线程
简单理解比喻:
线程:单指代码执行的过程(代码的执行)
进程:资源的申请与销毁的过程(申请内存空间,回收内存空间,pid号等)进程包含了线程
2.进程与线程的区别
1.线程:单个线程里的内存空间数据共享
2.进程:物理内存空间隔离(多个进程内存空间彼此隔离)
同一个进程下的多个线程共享该进程内的数据
3.创建数据
造出线程的数据要快于进程:进程是告诉操作系统开辟内存空间
线程是告诉操作系统执行一条任务代码(线程的创建速度是进程的100倍)
两种开启线程的方法:
from threading import Thread, current_thread
import time
# 方式1 函数开启方式
def task(name):
print('%s is runing '%name)
time.sleep(2)
print('%s is done'%name)
t=Thread(target=task,args=('子线程',))
t.start()
# 方式2 类开启方式class Task(Thread): def run(self): print('%s is runing ' % self.name) time.sleep(2) print('%s is done' % self.name)t = Task()t.start()print('zhu')3.进程开启子进程是开辟新的内存空间,而线程开启子线程是共用一个内存空间,
即:进程开启子进程的pid号不一样,
线程开启子线程的pid号一样
from threading import Thread
from multiprocessing import Process
import os
def work():
print('hello',os.getpid())
if __name__ == '__main__':
#part1:在主进程下开启多个线程,每个线程都跟主进程的pid一样
t1=Thread(target=work)
t2=Thread(target=work)
t1.start()
t2.start()
print('主线程/主进程pid',os.getpid())
#part2:开多个进程,每个进程都有不同的pid
p1=Process(target=work)
p2=Process(target=work)
p1.start()
p2.start()
print('主线程/主进程pid',os.getpid())