C++ 如何使Web服务器程序变为多线程
我有一个单线程web服务器,它接受C++ 如何使Web服务器程序变为多线程,c++,multithreading,http,pthreads,C++,Multithreading,Http,Pthreads,我有一个单线程web服务器,它接受GET或HEAD HTTP/1.0请求并将文件数据返回给客户端 我想使用pthread库使其成为多线程 具体地说,它为每个GET或HEAD请求创建一个请求类的实例,将其推送到队列(对于FIFO处理,它应该可以选择使用优先级队列执行相同的操作) 当执行时,它选择要执行的请求类,并并发处理请求 因此,应该有一个调度线程,它从就绪队列中选择一个请求并将其调度到其中一个执行线程,还有一个排队线程,负责侦听传入的HTTP请求并将其插入就绪队列,最后,有两个以上的执行线程执
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函数
我已经研究了一个星期,试图找出解决方案,但这是非常令人困惑的
请给我一些指导
谢谢。我想你可以把“排程”和“排队”合二为一。不管怎么说,你考虑过还是仅仅考虑过?它已经可以自动完成大部分管理工作,并且有多线程服务器的示例。项目描述中需要划分“调度”和“排队”。不过,我也不认为有必要进行分组。