1. 程式人生 > >雜談(第1篇) | 程序、執行緒、協程的區別與聯絡

雜談(第1篇) | 程序、執行緒、協程的區別與聯絡

作為程式設計師,在面試的時候經常被問到:說說程序、執行緒、協程的區別。下面我們就總結一下。

1.面試答案

    1.1  程序與執行緒的區別

總述:執行緒是程序的一個實體,一個程序至少有一個執行緒。

1.根本區別;程序是作業系統資源分配的基本單位;執行緒程是任務排程和執行的基本單位

2.地址空間:同一程序內的執行緒是共享本程序的地址空間的;而程序之間是相互獨立的地址空間

3.共享資源:同一程序內的執行緒共享本程序的資源如記憶體、I/O、cpu等,但是程序之間的資源是獨立的

4.健壯性:在保護模式下,一個程序的崩潰不會對其他程序產生影響,但是一個執行緒崩潰會導致整個程序都死掉。

5.切換開銷:每個程序都有獨立的程式碼和資料空間(程式上下文),程序之間的切換會有較大的開銷;執行緒可以看做輕量級的程序,同一程序內的執行緒共享程式碼和資料空間,每個執行緒僅僅有自己獨立的執行棧和程式計數器(PC),執行緒之間切換的開銷小。

   1.2  程序執行緒與協程的區別

總述:程序、執行緒都是作業系統的概念,資源分配和任務排程都是由作業系統完成;協程程式級別的,協程的排程是由使用者控制的,cup根本不知道協程的存在

1. 執行緒程序都是同步機制,而協程則是非同步的

2.協程能保留上一次呼叫時的狀態,每次過程重入時,就相當於進入上一次呼叫的狀態。

如果只問程序協程區別,只需答1.1 即可,如果問程序執行緒協程區別,則回答1.1 和 1.2