0

ファイルデータを受け入れるGETか、HEAD <filename> HTTP/1.0要求してクライアントに返すシングルスレッド Web サーバーがあります。

pthreadライブラリを使用してマルチスレッド化したいと考えています。

具体的には、requestGET または HEAD リクエストごとにクラスのインスタンスを作成し、それをキューpriority_queueにプッシュします (FIFO 処理の場合、オプションで代わりにa を使用して同じことを実行できるはずです)。

実行すると、実行するクラスが選択 requestされ、リクエストが同時に処理されます。

したがって、レディ キューからリクエストを選択し、それを実行スレッドの 1 つにスケジュールする 1 つのスケジューリング スレッドと、着信 HTTP リクエストをリッスンしてレディ キューに挿入する役割を担う 1 つのキューイングスレッドが必要です。最後に、リクエストを実行する実行スレッドが 3 つ以上あります。

私が念頭に置いている全体像は次のとおりです。

(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 関数が必要ですか?

私はこれを研究し、1週間解決策を見つけようとしていますが、これは非常に混乱しています.

どなたかご指南ください。

ありがとうございました。

4

0 に答える 0