python之-线程原理-开启线程两种方式,以及子进程与子线程pid的区别
1.什么是線程
進程其實不是個執(zhí)行單位,進程是一個資源單位,每個進程內(nèi)自帶一個線程,線程才是cpu上的執(zhí)行單位
如果把操作系統(tǒng)比喻成為一座工程
在工廠內(nèi)每造出一個車間---》啟動一個進程
每個車間內(nèi)至少有一條流水線---》每個進程內(nèi)至少有一個線程
簡單理解比喻:
線程:單指代碼執(zhí)行的過程(代碼的執(zhí)行)
進程:資源的申請與銷毀的過程(申請內(nèi)存空間,回收內(nèi)存空間,pid號等)進程包含了線程
2.進程與線程的區(qū)別
1.線程:單個線程里的內(nèi)存空間數(shù)據(jù)共享
2.進程:物理內(nèi)存空間隔離(多個進程內(nèi)存空間彼此隔離)
同一個進程下的多個線程共享該進程內(nèi)的數(shù)據(jù)
3.創(chuàng)建數(shù)據(jù)
造出線程的數(shù)據(jù)要快于進程:進程是告訴操作系統(tǒng)開辟內(nèi)存空間
線程是告訴操作系統(tǒng)執(zhí)行一條任務(wù)代碼(線程的創(chuàng)建速度是進程的100倍)
兩種開啟線程的方法:
from threading import Thread, current_thread
import time
# 方式1 函數(shù)開啟方式
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.進程開啟子進程是開辟新的內(nèi)存空間,而線程開啟子線程是共用一個內(nèi)存空間,
即:進程開啟子進程的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())
總結(jié)
以上是生活随笔為你收集整理的python之-线程原理-开启线程两种方式,以及子进程与子线程pid的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis之java操作篇(数据对象的存
- 下一篇: msimg32.dll是什么