多線程編程 :基礎概念

線程與進程

線程定義

1. 線程是進程中的一個實體,是被系統獨立調度和分派的基本單位。
2. 線程本身不擁有系統資源,只擁有一點兒在運行中必不可少的資源。
3. 但它可與同屬一個進程的其它線程共享進程所擁有的所有資源。
4. 線程也有就緒、阻塞和運行三種基本狀態。

引用異步

Linux進程狀態解析

R (TASK_RUNNING):可執行狀態。
        1.正在CPU上執行的進程 
        2.可執行可是還沒有被調度執行的進程
        
    S (TASK_INTERRUPTIBLE):可中斷的睡眠狀態
        處於這個狀態的進程由於等待某某事件的發生(好比等待socket鏈接、等待信號量),而被掛起。
        這些進程的task_struct結構被放入對應事件的等待隊列中。
        當這些事件發生時(由外部中斷觸發、或由其餘進程觸發),對應的等待隊列中的一個或多個進程將被喚醒
        
    D (TASK_UNINTERRUPTIBLE),不可中斷的睡眠狀態
        存在的意義就在於,內核的某些處理流程是不能被打斷的。
        若是響應異步信號,程序的執行流程中就會被插入一段用於處理異步信號的流程
T (TASK_STOPPED or TASK_TRACED),暫停狀態或跟蹤狀態
        向進程發送一個SIGSTOP信號,它就會因響應該信號而進入TASK_STOPPED狀態。 
              
        當進程正在被跟蹤時,它處於TASK_TRACED這個特殊的狀態。
        「正在被跟蹤」指的是進程暫停下來,等待跟蹤它的進程對它進行操做。
        好比在gdb中對被跟蹤的進程下一個斷點,進程在斷點處停下來的時候就處於TASK_TRACED狀態。
        而在其餘時候,被跟蹤的進程仍是處於前面提到的那些狀態。
        
    Z (TASK_DEAD - EXIT_ZOMBIE),退出狀態,進程成爲殭屍進程
        進程在退出的過程當中,處於TASK_DEAD狀態。
        在這個退出過程當中,進程佔有的全部資源將被回收,除了task_struct結構(以及少數資源)之外。
        因而進程就只剩下task_struct這麼個空殼,故稱爲殭屍。
        之因此保留task_struct,是由於task_struct裏面保存了進程的退出碼、以及一些統計信息。
        而其父進程極可能會關心這些信息。
    X (TASK_DEAD - EXIT_DEAD),退出狀態,進程即將被銷燬。
相關文章
相關標籤/搜索