<form id="dlljd"></form>
        <address id="dlljd"><address id="dlljd"><listing id="dlljd"></listing></address></address>

        <em id="dlljd"><form id="dlljd"></form></em>

          <address id="dlljd"></address>
            <noframes id="dlljd">

              聯系我們 - 廣告服務 - 聯系電話:
              您的當前位置: > 關注 > > 正文

              世界觀焦點:為什么用fork提高處理速度?詳情解釋

              來源:CSDN 時間:2023-02-17 09:07:23


              (資料圖)

              這里先說一下為什么用fork:

              例如:Web服務器,當許多瀏覽器來訪問的時候,如果服務器等一個處理完再處理另一個,那這樣就太慢了,服務器可以為每一個請求開一個進程,這樣就實現了多進程,提高處理速度。例如:有一個大工程,可以分為許多個模塊,就可以為每一個模塊創建一個線程,當然有的模塊之間有先后順序,這可以進行特殊處理。

              1. 概念:

              fork是在Linux中使用的一個分叉函數。若成功調用一次則返回兩個值,子進程返回0,父進程返回子進程標記,出錯則返回-1??梢园迅高M程和子進程的關系看做一個鏈表,父進程指向子進程,子進程如果還有子進程就再指向子進程,否則為空。

              2. 特性:

              每個進程都有一個非負整數表示的唯一進程ID;fork()函數通過系統調用創建一個與原來進程幾乎完全相同的進程;

              3. 特殊進程:

              ID為0的是調度進程,該進程是內核的一部分,不執行任何磁盤上的程序 ;ID為1的是Init進程,init通常讀取與系統有關的初始化文件(/etc/rc*文件、/etc/inittab文件、/etc/init.d/中的文件) ;ID為2的是頁守護進程,負責支持虛擬存儲器系統的分頁操作;

              常用的操作函數:

              #include      //頭文件pid_t getpid(void);     //返回調用進程的IDpid_t getppid(void);    //當前進程父進程ID

              4. 舉個栗子

              #include #include #include using namespace std;int main(){    int count = 0;    pid_t pid = fork();    if(pid < 0)        printf("error\n");    else if(pid == 0){        printf("Child Id = %d\n", getpid());        count++;    }else{        printf("Parent Id = %d\n", getpid());        count++;    }    prinf("count = %d\n", count);    return 0;}

              輸出結果為:

              Parent Id = 3496count = 1Child Id = 3497count = 1

              父進程和子進程沒有執行的先后順序,再加個圖,加深一下理解:

              圖 1  程序示意圖

              責任編輯:

              標簽:

              相關推薦:

              精彩放送:

              新聞聚焦
              Top 中文字幕在线观看亚洲日韩