在傳統作業系統中,每個程序有乙個位址空間,而且預設就有乙個控制線程,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(2)
print('子執行緒 end')
t=myt()
t.start()
print('主線程')
rom threading import thread
from multiprocessing import process
import time
def task(name):
print(f' is running')
time.sleep(2)
print(f' 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
def task():
print('子執行緒 start')
time.sleep(2)
print('子執行緒 end')
t = thread(target=task)
t.start()
t.join() # 等待子執行緒執行結束
print('主線程')
方法二單核下同乙個程序的執行緒如何切換
from threading import thread
import time
def task(name,n):
print(f' start')
time.sleep(n)
print(f' end')
t1 = thread(target=task,args=('執行緒1',1))
t2 = thread(target=task,args=('執行緒2',2))
t3 = thread(target=task,args=('執行緒3',3))
start = time.time()
t1.start()
t2.start()
t3.start()
t1.join() # 111s
t2.join() #
t3.join()
end = time.time() # 3.0039877891540527
# 思考一下 在單核的情況下 多個執行緒是如何利用cpu的
print(end-start)
# print('主線程')
from threading import thread,currentthread,enumerate,activecount
# import threading
import time
# threading.current_thread()
# threading.current_thread()
def task():
print('子執行緒 start')
time.sleep(2)
print('子執行緒 end')
print(enumerate())
# print(currentthread(),'子執行緒')
if __name__ == '__main__':
t1 = thread(target=task)
t2 = thread(target=task)
t1.start()
t2.start()
# print(t1.is_alive()) # true
# print(t1.getname()) # thread-1
# print(t2.getname()) # thread-2
# t1.setname('班長')
# print(t1.getname())
# print(currentthread().name)
# print(enumerate()) # [<_mainthread(mainthread, started 1856)>, , ]
# print(activecount()) # 3
# print(len(enumerate())) # 3
# 守護執行緒 守護的是程序的執行週期
from threading import thread,enumerate,currentthread
import time
def task():
print('守護執行緒開始')
print(currentthread())
time.sleep(20)
# print('守護執行緒結束')
def task2():
print('子執行緒 start')
time.sleep(5)
print(enumerate())
print('子執行緒 end')
if __name__ == '__main__':
t1 = thread(target=task)
t2 = thread(target=task2)
t1.daemon = true
t2.start()
t1.start()
print('主')
ZThread多執行緒庫學習筆記整理二
通過第一階段的工程部署,多執行緒管理庫zthread.lib和zthread.dll已經生成,不過為了更好的使用該庫和弄懂該庫的實現機制,我們可能需要生成該庫的幫助文件,在linux下,大家可以參考相關的makefile檔案,利用make工具即可很好的生成該doc目錄下的html格式的幫助文件,但是...
ZThread多執行緒庫學習筆記整理三
對於該庫的學習和文件資料的整理,我個人把握的主線是以程式實踐作為基礎,在程式實踐的基礎上對相關的實現 進行學習,明確整個庫的基本架構層次,學習庫的架構設計和庫中涉及到的設計思想,以此來提高自己程式結構設計的能力和在 實現時的設計模式的運用技能。為了方便對庫進行跟蹤與除錯,我決定在自己部署的zthre...
多執行緒 待整理
一些零散的記錄,有空再整理 suspendthread和resumethread的作用其實很簡單,他們都是通過執行緒的handle到執行緒的資料結構中將乙個計數的變數 只有乙個byte大小的int變數 進行加一減一的操作,可以簡單的認為 dword suspendthread handle hthr...