世界观焦点:为什么用fork提高处理速度?详情解释

发布时间:   来源:CSDN  


(资料图)

这里先说一下为什么用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  程序示意图

相关文章Related

返回栏目>>