執行緒理論之大白話

2022-02-26 09:42:58 字數 1764 閱讀 9557

什麼是執行緒?

把乙個程序比喻為乙個車間,那麼執行緒就是車間裡面的一條條流水線。乙個車間可以有多條流水線,流水線屬於車間。乙個車間的工作過程是乙個程序,乙個流水線的工作過程是乙個執行緒。程序是作業系統資源分配的最小單位(生產科3號車間負責生產3萬件包裝紙箱),執行緒是cup排程的最小單位(3號車間裡面的每一條生產線負責生產紙箱這個具體的任務)。

多執行緒的概念?

就是乙個程序中存在多條執行緒。多執行緒是資料共享的(共享程序中的空間位址啥的),就是3號車間有多條流水線,都共用了乙個車間的資源。

多執行緒的應用舉例:

辦公三件套之word為例,開啟word軟體就開啟了乙個程序,這個程序至少要幹幾件事兒,1監控鍵盤輸入;2處理文字;3定時自動儲存文字資訊等,這幾件事兒操作的都是同一塊資料,所以不能使用多程序(程序間資料隔離啊),只能在乙個程序裡併發的開啟三個縣城,如果是單執行緒,那就只能是鍵盤輸入時,不能處理文字和自動儲存,自動儲存時又不能打字。

開啟執行緒的兩種方式:

multiprocess模組完全模仿了threading模組的介面,二者在使用層面,有很大的相似性。

方式一:

from threading import

thread

import

time

defsayhi(name):

time.sleep(2)

print('

say hi %s

' %name)

if__name__ == '

__main__':

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

cariee

',))

t.start()

print('

主線程')

方式二:

from threading import

thread

import

time

class

sayhi(thread): # 建立了程序thread

def__init__

(self,name):

super().

__init__

() # thread的__init__方法很重要,通過super()呼叫

self.name =name

defrun(self):

time.sleep(2)

print('

%s say hi

' %self.name)

if__name__ == '

__main__':

t = sayhi('

cariee')

t.start()

print('

主線程')

多執行緒和多程序的區別:

1執行緒的建立開銷小於程序建立的開銷

2程序間資料隔離,執行緒間資料共享

thread物件的其他屬性和方法:

.isalive(): 返回執行緒是否『活著』

.getname():返回執行緒名

.setname():設定執行緒名

threading模組提供了一些方法:

threading.currentthread():返回當前的執行緒變數

threading.enumerate():返回乙個包含正在執行的執行緒的list。正在執行指執行緒啟動後、結束前,不包括啟動前和終止後的執行緒

threading.activecount():返回正在執行的執行緒數量,與len(threading.enumerate())有相同的結果

OpenGl 名詞解釋之大白話

變換 opengl中的變換實際上是通過矩陣乘法來實現的,無論是移動 縮放 旋轉,都是通過在當前矩陣的基礎上乘以乙個新的矩陣來達到目的 檢視變換 視 就是看,圖當然就是我所看的 變換 不斷的變化 連線在一起就是指觀察者的位置在不斷的變化,從而導致的就是檢視在不斷的變化 例如 在unity的scene中...

mysql用大白話解釋 大白話說說mysql索引

前面其實寫了好幾篇關於 mysql 索引的文章了,文章中有具體的例項和 sql 語句,這篇文章我想再用純大白話講講 mysql 索引,文中不涉及具體 sql 我之前甚至想過為啥要用資料庫來儲存資料,用普通的 txt 或者 word 這類檔案不行麼,這個問題其實可以從幾個方面來看,乙個是併發訪問資料加...

快速排序(大白話)

假設我們現在對 6 1 2 7 9 3 4 5 10 8 這個10個數進行排序。首先在這個序列中隨便找乙個數作為基準數 不要被這個名詞嚇到了,就是乙個用來參照的數,待會你就知道它用來做啥的了 為了方便,就讓第乙個數6作為基準數吧。接下來,需要將這個序列中所有比基準數大的數放在6的右邊,比基準數小的數...