程序 執行緒 協程

2021-08-28 13:42:12 字數 1053 閱讀 2294

多程序多執行緒的最終目地都是為了加快任務處理的時間,但是受限於cpu核數(只有多核才能實現並行,任務耗時=單核任務耗時/ cpu核數),那麼在單核上執行多程序多執行緒是不是沒有用了,加快不了處理的速度了?

答案肯定是不是的,不然這個東西設計出來太雞肋了,那它們加快處理的原理是什麼呢?乙個程序耗時ť!,b程序耗時t2,單核多程序其實也就是甲程序執行一段時間去執行b,但總的時間不應該是一樣的嗎,甚至會更多,程序執行緒的切換的消耗?

如果說任務中只有cpu耗時,那麼多程序多執行緒是沒有用,但實際上除了cpu消耗,還有i / o消耗,或者一些其他的我阻塞(cpu在等待),例如資料的讀寫( cpu將這些交給dma晶元完成,計算機中處理任務的部件很多),這些情況下的cpu都是沒有工作的,那如果是多程序中(多執行緒也會有這個效果),cpu就可以去其他程序執行任務了,等下一次輪詢過來繼續執行,這樣多程序多執行緒就加快了任務的處理時間

,所以說

多程序多執行緒受限於cpu核數,但是達到了優化cpu利用率效果。

蟒蛇中的多程序多執行緒協程

1.多程序

2.多執行緒

python中的多執行緒只能在乙個核上跑,受限於gil(全域性直譯器鎖),執行緒的執行過程:1。設定gil 2.切換到乙個執行緒去執行3.執行4.把執行緒設定為睡眠狀態5.解鎖gil 6.再次重複以上步驟。

多執行緒可能會有資料衝突需要用到鎖而使用鎖可能有死鎖的風險

3.協程

不管是多程序還是多執行緒都有乙個排程問題

,這個是作業系統執行的,什麼時間執行什麼程序(執行緒),不適當的程序執行緒切換可能會有很多不必要的消耗

,這種排程方式可以被優化,那就是協程(協程只存在與乙個執行緒中),協程的排程是使用者的控制,有點類似執行緒同步中的條件變數(

/ 82799455

),例協程a協程b,當協程a執行到某個位置阻塞,使用者可以讓它去執行協程b,在協程b中發現a的某個條件達到了,可以選擇喚醒協程a,暫停協程b.這種也只能在使用單核cpu,但是與多執行緒相比,不存在死鎖問題(這個是由於協程的排程由程式設計師控制

),無線程切換(多協程都只在乙個執行緒中)。目前個人感覺它的實際應用價值不高

程序 執行緒 協程

程序是系統資源分配的最小單位,系統由乙個個程序 程式 組成。一般情況下,包括文字區域 text region 資料區域 data region 和堆疊 stack region 檔案描述符表 程序每次開啟乙個檔案,系統就會在該程序的使用者檔案描述符表中分配乙個相應的表項,表項的索引返回給該程序,用於...

執行緒 程序 協程

執行緒是作業系統中進行運算排程的最小單位。執行緒被包含在程序之中,是程序中的實際運作單位。一條執行緒指的是程序中乙個單一順序的控制流,乙個程序可以併發多個執行緒,每條執行緒並行執行不同的任務。乙個執行緒是乙個execution context 執行上下文 即乙個cpu執行時所需要的一串指令。每個獨立...

程序 執行緒 協程

程序的出現是為了更好的利用cpu資源使到併發成為可能。假設有兩個任務a和b,當a遇到io操作,cpu默默的等待任務a讀取完操作再去執行任務b,這樣無疑是對cpu資源的極大的浪費。聰明的老大們就在想若在任務a讀取資料時,讓任務b執行,當任務a讀取完資料後,再切換到任務a執行。注意關鍵字切換,自然是切換...