C++ 如何使Web服务器程序变为多线程

C++ 如何使Web服务器程序变为多线程,c++,multithreading,http,pthreads,C++,Multithreading,Http,Pthreads,我有一个单线程web服务器,它接受GET或HEAD HTTP/1.0请求并将文件数据返回给客户端 我想使用pthread库使其成为多线程 具体地说,它为每个GET或HEAD请求创建一个请求类的实例,将其推送到队列(对于FIFO处理,它应该可以选择使用优先级队列执行相同的操作) 当执行时,它选择要执行的请求类,并并发处理请求 因此,应该有一个调度线程,它从就绪队列中选择一个请求并将其调度到其中一个执行线程,还有一个排队线程,负责侦听传入的HTTP请求并将其插入就绪队列,最后,有两个以上的执行线程执

我有一个单线程web服务器,它接受
GET
HEAD HTTP/1.0
请求并将文件数据返回给客户端

我想使用
pthread
库使其成为多线程

具体地说,它为每个GET或HEAD请求创建一个
请求
类的实例,将其推送到队列(对于FIFO处理,它应该可以选择使用
优先级队列
执行相同的操作)

当执行时,它选择要执行的
请求
类,并并发处理请求

因此,应该有一个调度线程,它从就绪队列中选择一个请求并将其调度到其中一个执行线程,还有一个排队线程,负责侦听传入的HTTP请求并将其插入就绪队列,最后,有两个以上的执行线程执行请求

我心目中的大局是:

(This is pseudocode)

int main{

    queue q; //shared variable

    while(true) {

        pthread_t qt, st, et1, et2;

        request rq1, rq2;
        //create, bind, accept socket

        pthread_create(qt, ... , some_queuing_function , queue); //listen and queue the request

        pthread_create(st, ... , some_scheduling_function, queue);  //select a request from the queue, assign it to rq1 and rq2(using a shared variable, increment the index of request to be selected if executing threads are not full?)

        pthread_create(et1, ... , some_executing_function, rq1);

        pthread_create(et2, ... , some_executing_function, rq2);

        pthread_join(...);
        pthread_join(...);
        pthread_join(...);
        pthread_join(...);
    }

}

void * some_scheduling_function() { ... with mutex on queue }
void * some_queuing_function() { ... with mutex on queue }
void * some_executing_function() { ... }
这是我第一次使用
pthread
,或任何其他多线程库,因此我对此了解不多

我不确定这个设计是否可行,因为它太简单了

我不确定函数的划分是否正确,它们的顺序是否正确,或者结构是否正确

特别是,在执行线程将请求分配给所有执行线程,并且所有执行线程执行所有请求之后,它们如何返回

另外,排队和调度是否需要pthread_join函数

我已经研究了一个星期,试图找出解决方案,但这是非常令人困惑的

请给我一些指导

谢谢。

我想你可以把“排程”和“排队”合二为一。不管怎么说,你考虑过还是仅仅考虑过?它已经可以自动完成大部分管理工作,并且有多线程服务器的示例。项目描述中需要划分“调度”和“排队”。不过,我也不认为有必要进行分组。