1. 程式人生 > >悟已往之不諫,知來者之可追

悟已往之不諫,知來者之可追

  1. 程序和執行緒的區別:首先程序和執行緒都是一個時間段的描述,是CPU工作時間段的描述。一般來說,程序是資源的分配單位,執行緒是CPU在程序內切換的單位,執行緒屬於程序。程序更傾向於記憶體管理的概念,他在自己的區域掌控自己的資源,也不越界;執行緒更傾向於CPU的執行。當前的計算機的CPU總要跑在一個執行緒上,但是又無法做到同時跑在多個執行緒上。看似多執行緒可以同時執行,其實他們之間是通過時間片的切換來做到的。但是,上面說的程序更傾向於記憶體,執行緒更傾向於CPU是對的,但是不代表程序和CPU絕緣,執行緒和記憶體絕緣執行緒確實是CPU的持有者,但是CPU實際上是先給到程序的。在不同的程序之間時間片進行一個切換。比如跑到這個執行緒,之前執行的執行緒就要儲存它的上下文,當前的這個執行緒的上下文就會得到一個載入,然後CPU是跑在這個程序裡的,然後時間片就會在這個程序裡的執行緒中自由分配。
  2. 程序之間的通訊:每個程序各自有不同的使用者地址空間,任何一個程序的全域性變數在另一個程序中都看不到,所以程序之間要交換資料必須通過核心,在核心中開闢一塊緩衝區,程序A把資料從使用者空間拷到核心緩衝區,程序B再從核心緩衝區把資料讀走,核心提供的這種機制稱為程序間通訊。
  3. 管道(pipe)
  1. 執行緒之間的通訊
    • 事件(Event)
    • 訊號量(semaphore)
    • 互斥量(mutex)
    • 臨界區(Critical section)