程序、執行緒和協程是三個在多工處理中常聽到的概念,三者各有區別又相互聯絡。
程序,直觀點說,儲存在硬碟上的程式執行以後,會在記憶體空間裡形成乙個獨立的記憶體體,這個記憶體體有自己獨立的位址空間,有自己的堆,上級掛靠單位是作業系統。作業系統會以程序為單位,分配系統資源(cpu時間片、記憶體等資源),程序是資源分配的最小單位。
執行緒,有時被稱為輕量級程序(lightweight process,lwp),是作業系統排程(cpu排程)執行的最小單位
區別::
聯絡:
協程,是一種比執行緒更加輕量級的存在,協程不是被作業系統核心所管理,而完全是由程式所控制(也就是在使用者態執行)。這樣帶來的好處就是效能得到了很大的提公升,不會像執行緒切換那樣消耗資源。
子程式,或者稱為函式,在所有語言中都是層級呼叫,比如a呼叫b,b在執行過程中又呼叫了c,c執行完畢返回,b執行完畢返回,最後是a執行完畢。所以子程式呼叫是通過棧實現的,乙個執行緒就是執行乙個子程式。子程式呼叫總是乙個入口,一次返回,呼叫順序是明確的。而協程的呼叫和子程式不同。
協程在子程式內部是可中斷的,然後轉而執行別的子程式,在適當的時候再返回來接著執行。
def a():
print '1'
print '2'
print '3'
def b():
print 'x'
print 'y'
print 'z'
假設由協程執行,在執行a的過程中,可以隨時中斷,去執行b,b也可能在執行過程中中斷再去執行a,結果可能是:1 2 x y 3 z。 程序 執行緒與協程
程序的出現是為了更好的利用cpu資源使到併發成為可能。假設有兩個任務a和b,當a遇到io操作,cpu默默的等待任務a讀取完操作再去執行任務b,這樣無疑是對cpu資源的極大的浪費。聰明的老大們就在想若在任務a讀取資料時,讓任務b執行,當任務a讀取完資料後,再切換到任務a執行。注意關鍵字切換,自然是切換...
協程與程序,執行緒
我們通常所說的協程coroutine其實是corporateroutine的縮寫,直接翻譯為協同的例程,一般我們都簡稱為協程。在linux系統中,執行緒就是輕量級的程序,而我們通常也把協程稱為輕量級的執行緒即微執行緒。程序是核心排程,而協程是在使用者態排程,也就是說程序的上下文是在核心態儲存恢復的,...
程序 執行緒 協程
多程序多執行緒的最終目地都是為了加快任務處理的時間,但是受限於cpu核數 只有多核才能實現並行,任務耗時 單核任務耗時 cpu核數 那麼在單核上執行多程序多執行緒是不是沒有用了,加快不了處理的速度了?答案肯定是不是的,不然這個東西設計出來太雞肋了,那它們加快處理的原理是什麼呢?乙個程序耗時 b程序耗...