0

我有一个单线程 Web 服务器,它接受GETHEAD <filename> HTTP/1.0请求并将文件数据返回给客户端。

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

request具体来说,它为每个 GET 或 HEAD 请求创建一个类的实例,将其推送到队列中(用于 FIFO 处理,它应该能够用 apriority_queue替代做同样的事情,可选)。

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

因此,应该有一个调度线程,它从就绪队列中选择一个请求并将其调度到其中一个执行线程,以及一个队列线程,负责侦听传入的 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 函数?

我一直在研究这个并试图找出一个星期的解决方案,但这非常令人困惑。

请给我一些指导。

谢谢你。

4

0 回答 0