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

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

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


(資料圖)

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

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

1. 概念:

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

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 岛国精品在线