服务器编程之fork并行模式

摘要:网络编程本身并不复杂或多么困难,复杂或困难的是在不稳定的网络中做到稳定的服务器与通信,此时并行技术是实现的稳定的服务器的技术之一,当然也不是服务器端使用的技术。fork是POSIX系统中产生新进程的唯一方法,可以实现进程并行编程模式。

在介绍服务器编程的fork模式之前,我们首先来说说fork自身的问题,对于深知fork的读者可以跳过本段内容。fork通常作为一个系统调用来存在,或者作为一个系统调用的简单封装,它对于内核来说只做一件事:把当前进程的内存镜像复制一份,以在系统中产生一个新进程,并在两个进程中各返回一次,新产生的进程与原本的进程完全相同,它们共享着文件描述符,如此在两个进程中可以对同一文件进行操作,套接字也如此。

服务器编程的fork并行模式的基本的思想是:一个进程监听一相应的端口,当取得一个客户连接的时候,它使用fork产生一个新进程,由于新进程是原进程的复本,所以它可以与客户完成通信,而原来的父进程仍然继续监听那个端口,下面是一个典型的代码片断:

 

复制代码
#include<sys/socket.h>
#include<sys/types.h>
#include<unistd.h>

int main()
{
    //如同串行的程序,这之前完成许多初始工作
    //下面代码假设sockfd是一个监听套接字

    while(1)
    {
        //如果想知道客户地址,后面两个参数可以指定相应的结构
        int cfd=accpet(sockfd, NULL, NULL);
        int pid=fork();
        if(0>pid)
        {
            //创建进程失败,我们直接退出服务器
            //这只是一个示例程序
            return -1;
        }
        else if(0<pid)
        {
            close(cfd);
            continue;
        }

        //此处代码我意在让新进程运行,此时pid==0是明显的
        close(sockfd);

        //新进程使用cfd与客户进程进行通信
        //在通信结束之后,新进程也许就直接退出了
    }
}
复制代码

上述的代码片断只是一个示例性的,以简单明了为基础,但它却直接而不明白反应了fork并行模式的基本思想。在实际中的程序还可以需要对信号进行处理,尤其当新进程比父进程早退出的时候,父进程会收到一个SIGCHILD信号,如果父进程不wait或waitpid的话,它将变成一个僵死进程,显然这是不希望的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值