fastcgi中的多线程使用

0.背景

在项目中加入了等待通讯的内容,所以原来单个请求处理时间增加了。单线程处理的fcgi就会浪费CPU和用户时间,所以需要多线程来处理,减少用户排队时间。

将处理用户请求的部分从单线程变为多线程,需要大概了解改动会不会影响性能。

得到的结论是:多线程和单线程在执行的流程和使用方法几乎一样,所以多线程不会带来额外的负担。

1.单线程的处理步骤

1.1一个简单的单线程fcgi请求
    #include <fcgi_stdio.h>

    void main(void)
    {
        int count = 0;
        while(FCGI_Accept() >= 0) {
            printf("Content-type: text/html\r\n");
            printf("\r\n");
            printf("Hello world!<br>\r\n");
            printf("Request number %d.", count++);
        }
        exit(0);
    }
1.2进入FCGI_Accept。

进入这个 FCGI_Accept() 方法里面,在文件fcgi_stdio.c里。

int FCGI_Accept(void)
{
    //变量表示是否接收请求。默认为Fasle,不接收请求
    if(!acceptCalled) {
        //判断是否为cgi,变量为全局静态的,下次还会用。
        isCGI = FCGX_IsCGI();
        //状态改为接收请求。
        acceptCalled = TRUE;
        //请求的收尾,将数值清空赋初值。
        atexit(&FCGI_Finish);
    } else if(isCGI) {
        //不是第一次请求,并且是cgi程序。
        return(EOF);
    }
    if(isCGI) {
        //cgi的初始赋值操作,不关心。
        ...
    } else {
        FCGX_Stream *in, *out, *error;
        //char** 字符串数组。
        FCGX_ParamArray envp;
        //接受请求,这个方法下面介绍
        int acceptResult = FCGX_Accept(&in, &out, &error, &envp);
        //接收失败,返回<0,这也
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值