ファイルデータを受け入れるGET
か、HEAD <filename> HTTP/1.0
要求してクライアントに返すシングルスレッド Web サーバーがあります。
pthread
ライブラリを使用してマルチスレッド化したいと考えています。
具体的には、request
GET または 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週間解決策を見つけようとしていますが、これは非常に混乱しています.
どなたかご指南ください。
ありがとうございました。