2019 09 17學習整理 執行緒

2022-08-13 06:03:09 字數 3562 閱讀 1285

在傳統作業系統中,每個程序有乙個位址空間,而且預設就有乙個控制線程,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...