區別:進程有獨立的位址空間,一個進程崩潰後,在保護模式下不會對其它進程產生影響;而線程只是一個進程中的不同執行路徑(一個進程由一個或多個執行緒組成),執行緒之間沒有單獨的位址空間(共享記憶體),一個執行緒死掉就等於整個行程死掉。
本教學操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。
執行緒分為:單執行緒與多執行緒
單一執行緒:一個正在執行的程式(即進行)至少有一個執行緒,這個線程叫做主線程,只有一個主線程的程序叫做單線程程序,主線程負責執行所有代碼的執行(UI展現及刷新、網絡請求、本地存儲等),這些代碼只能順序執行,不能並發執行。
多執行緒:有多個執行緒的程式叫做多執行緒程序,主執行緒可以開闢多個子執行緒,子執行緒都是獨立運作的單元,各自的執行互不影響,能夠並發執行。
單執行緒與多執行緒的差異:
單執行緒:只有一個執行緒,程式碼順序執行,容易出現程式碼阻塞(頁假死);
多執行緒:擁有多個線程,且有執行緒間獨立運行,可有效避免程式碼阻塞,並且能提升程式碼的運作效能。
流程定義:流程就是進行中的程序,它是個動態的概念。是系統進行資源分配與調度的基本單位。
一個程式至少包含一個行程,一個行程至少包含一個執行緒;
#多進程擁有獨立的內存,多線程共享內存,所以說是多線程提高了運行效率;
多線程的重要意義在於,多個程序可以同時執行,但是系統並沒有將多線程看成是多個獨立的應用。
範例:
1.電腦的核心是CPU,它承擔了所有的計算任務。它就像一座工廠,時刻在運作。
2.假定工廠的電力有限,且一次只能供給一個工場使用。也就是說,一個車間開工的時候,其他車間都必須停工。背後的意義就是,單一CPU一次只能運行一個任務。
3.進程就好比工廠的車間,它代表CPU所能處理的單一任務。任一時刻,CPU總是運行一個進程,其他進程處於非運行狀態。
4.在一個車間裡,可以有許多工人。他們協同完成一個任務。
5.線程就好比車間裡的工人。一個行程可以包括多個執行緒。
6.工場的空間是工人共享的,例如許多房間是每個工人都可以進出的。這象徵一個行程的記憶體空間是共享的,每個執行緒都可以使用這些共享記憶體。
7.可是,每個房間的大小不同,有些房間最多只能容納一個人,例如廁所。裡面有人的時候,其他人就不能進去了。這代表一個執行緒使用某些共享記憶體時,其他執行緒必須等它結束,才能使用這一塊記憶體。
8.一個防止他人進入的簡單方法,就是在門口加上一個鎖。先到的人鎖上門,後到的人看到上鎖,就在門口排隊,等鎖打開再進去。這就叫"互斥鎖"(Mutual exclusion,縮寫 Mutex),防止多個執行緒同時讀取和寫入某一塊記憶體區域。
9.還有一些房間,可以同時容納n個人,例如廚房。也就是說,如果人數大於n,多出來的人只能在外面等。這好比某些記憶體區域,只能供給固定數目的執行緒使用。
10.這時的解決方法,就是在門口掛n把鑰匙。進去的人就拿鑰匙,出來時再把鑰匙掛回原處。後到的人發現鑰匙架空了,就知道一定要在門口排隊等了。這種做法叫做"信號量"(Semaphore),用來確保多個執行緒不會互相衝突。不難看出,mutex是semaphore的特殊情況(n=1時)。也就是說,完全可以用後者取代前者。但是,因為mutex較為簡單,且效率高,所以在必須保證資源獨佔的情況下,還是採用這種設計。
11.作業系統的設計,因此可歸結為三點:
(1)以多重處理形式,允許多個任務同時運作;
以多執行緒形式,允許單一任務分成不同的部分運作;## (3)提供協調機制,並以防止進程之間和執行緒之間產生衝突,另一方面允許進程之間和執行緒之間共享資源。
進程和執行緒的主要差異在於它們是不同的作業系統資源管理方式。進程有獨立的位址空間,一個進程崩潰後,在保護模式下不會對其它進程產生影響,而執行緒只是一個進程中的不同執行路徑。程式設計影片執行緒有自己的堆疊和局部變量,但執行緒之間沒有單獨的位址空間,一個執行緒死掉就等於整個行程死掉,所以多行程的程式要比多執行緒的程式健壯,但在進程切換時,耗費資源較大,效率差一些。
但對於一些要求同時進行並且又要共享某些變數的並發操作,只能用線程,不能用進程。
更多程式相關知識,請造訪:
以上是JavaScript中進程和執行緒的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!