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