程序是程式的一次執行,是系統資源(CPU時間、記憶體)配置設定的基本機關。
線程是程序的一個執行流,是CPU排程和分派的基本機關,它是比程序更小的能獨立運作的基本機關,一個程序可以有多個線程,多個線程可以并發執行,線程與同屬一個程序的其他線程共享程序所擁有的全部資源。
與程序比較
線程的優點:
啟動一個線程比啟動一個程序節省資源,同一程序下的線程共享資料空間,友善通信。
線程的缺點:
一個線程要是死掉了,整個程序就死掉了,一個程序死掉了不會影響其他程序,是以多程序比多線程健壯。
不與程序比較
1、提高應用程式響應。當一個操作耗時很長時,整個系統都會等待這個操作,此時不會響應鍵盤、滑鼠等操作,而使用多線程技術,将耗時長的操作置于一個新的線程,可以避免這種情況。
2、使多CPU系統更加有效。作業系統會保證當線程數不大于CPU數目時,不同的線程運作于不同的CPU上。
3、改善程式結構。一個既長又複雜的程序可以考慮分為多個線程,成為幾個獨立的運作部分,這樣的程式會利于了解和修改。
注:CPU時間即反映CPU全速工作時完成該程序所花費的時間。
關于同步與異步
同步就是在發出一個“調用時”,在沒有得到結果之前,該“調用”就不傳回,如果結果傳回時間很長,就出現阻塞狀态。換句話說,就是由“調用者”主動等待這個“調用”結果。
異步則是在“調用發出後”,這個調用就直接傳回了,沒有傳回結果,“被調用者”來通知“調用者”傳回的結果。
舉個通俗的例子:
你打電話問書店老闆有沒有《分布式系統》這本書,如果是同步通信機制,書店老闆會說,你稍等,”我查一下”,然後開始查啊查,等查好了(可能是5秒,也可能是一天)告訴你結果(傳回結果)。
而異步通信機制,書店老闆直接告訴你我查一下啊,查好了打電話給你,然後直接挂電話了(不傳回結果)。然後查好了,他會主動打電話給你。在這裡老闆通過“回電”這種方式來回調。
而阻塞與非阻塞阻塞和非阻塞關注的是程式在等待調用結果(消息,傳回值)時的狀态.
1. 阻塞非阻塞表示下面 買書過程中 可能出現的狀态,是從 我 這個單角色角度來看待這個買書這個問題。
2. 同步異步表示一種協作方式,是從全局更高的角度 “程序之間 合作的方式” 來看待買書這個業務。兩個程序之間如果商量采用異步方式處理買書這一業務,就不存在阻塞這種狀态。
異步和多線程兩者都可以達到避免調用線程阻塞的目的,進而提高軟體的可響應性。
本文轉自 00_yatou 51CTO部落格,原文連結:http://blog.51cto.com/ql0722/1614755,如需轉載請自行聯系原作者