執行緒理論及開啟執行緒的兩種方式

2022-06-30 16:18:12 字數 3187 閱讀 8369

manage 建立共享內容

生產者消費者模型使用場景

多道技術(不太清楚)

生產者消費者模型可以應用於多台機器上 分布式 可以多台計算器放著生產者,壞了幾台也不影響,穩定。

如果有多個生產者消費者那麼佇列就要基於網路,應該做成套接字。

放在main下面匯入問題——》開啟子程序涉及到乙個匯入模組的問題,不放在main下start開啟子程序匯入時會把自己又執行一次,造成重複匯入。

今日內容:

程序不是執行單位為什麼可以執行**?因為是裡面的執行緒在執行

cpu切換切的是執行緒

1.什麼是執行緒?為何有執行緒?怎麼用執行緒?

執行緒指的是一條流水線的工作流程

程序不是乙個執行單位是乙個資源單位。

乙個程序內自帶乙個執行緒,執行緒是執行單位。

每個程序內自帶乙個執行緒,執行緒才是cpu的執行單位

程序在執行本質是程序裡的執行緒在執行

乙個檔案的執行:先開闢乙個空間,生成的資料往裡面丟

執行緒的執行:空間已經由程序造好了,直接執行就行了

執行緒是乙個抽象的概念。(三個執行緒就是有三段**在執行,三個程序就是有三個記憶體空間建立)

2.開啟執行緒的兩種方式 (*****)

開執行緒不需要寫到main下,但是為了規範還是要寫main。

3 執行緒vs程序 (*****)

同一程序內的執行緒們共享該程序內的資源,不同程序內的執行緒資源肯定是隔離的。

建立執行緒的開銷比建立程序要小得多。

1、 執行緒中沒有父子關係。相較於子執行緒、主線程特殊之處在於其代變了主程序的生命週期。

主程序等待子程序結束然後結束,是為子程序**資源。
主線程等待子執行緒結束然後結束,是等待這個程序的**(其他非守護執行緒)執行完畢。

方式一:匯入thread模組

from threading import

thread

import

time

deftask(name):

print('

%s is running

' %name)

time.sleep(3)

if__name__ == '

__main__':

t=thread(target=task,args=('

egon

',))

t.start()

print('

主線程'

)方式二:建立類繼承thread

from threading import

thread

import

time

class

mythread(thread):

defrun(self):

print('

%s is running

' %self.name)

time.sleep(3)

if__name__ == '

__main__':

t=mythread()

t.start()

print('

主線程')

建立執行緒的兩種方式

1檢視執行緒pid:乙個程序中的執行緒pid是一樣的

1、瞅一瞅pid (process id)

from threading import

thread

import

time,os

deftask():

print('

%s is running

' %os.getpid())

time.sleep(3)

if__name__ == '

__main__':

t=thread(target=task,)

t.start()

print('

主線程',os.getpid()) #

乙個程序中的子執行緒pid相同

檢視執行緒pid

2 執行緒建立開銷小:子程序建立不需要向作業系統申請記憶體空間,直接執行程式。

3.同乙個程序中的多個執行緒共享程序的資源

from threading import

thread

import

time,os

x=1000

deftask():

global

x x=0

if__name__ == '

__main__':

t=thread(target=task,)

t.start()

t.join()

print('

主線程',x) #

主線程 0

共享程序內資源

執行緒的物件以及屬性

檢視當前執行緒名字(current_thread().name),active_count() 檢視當前活躍的執行緒數 ,獲得執行緒物件 enumerate(),以及檢視當前執行緒的pid

from threading import

thread,current_thread,active_count,enumerate

import

time,os

deftask():

print('

%s is running

' %current_thread().name) #

thread-1 is running

time.sleep(3)

print("

%s is done

"%os.getpid())

if__name__ == '

__main__':

t1=thread(target=task,name='

第乙個執行緒')

t2=thread(target=task,)

t3=thread(target=task,)

t1.start()

t2.start()

t3.start()

print(t1.is_alive()) #

true

print(active_count()) #

4print(enumerate())

執行緒名,活躍執行緒數,執行緒物件返回

多執行緒 兩種方式建立執行緒

第一種方式 繼承thread類 public class threaddemo extends thread catch interruptedexception e if s 50 public static void main string args 第二種方式 實現runnable介面 pub...

Python 開啟執行緒和程序的兩種方式

開銷 在發生開啟程序給作業系統時,作業系統需要申請記憶體空間給子程序,拷貝父程序位址空間到子程序,而開啟執行緒不需要這些步驟,因此開啟程序開銷遠大於執行緒,開啟速度為執行緒快 位址空間 程序之間位址空間是隔離的,開多個程序,每個程序都有不同的pid,但子程序的資料是來自於拷貝父程序的資料,程序之間存...

執行緒 1 建立執行緒的兩種方式

1.程序個執行緒的區別 程序 系統程式執行的最小單位,乙個程式至少有乙個程序 系統會在記憶體中開闢一塊空間用來執行程式。執行緒 程式執行任務的最小單位,執行緒不能單獨存在,必須存在與程序中,乙個程序中至少包含乙個執行緒。2.建立和啟動執行緒的兩種方式 建立執行緒的方式一 public class 類...