- ベストアンサー
キューの使い方とは?プログラムでの必要性はあるのか?
- キューとは、先入れ先出し(FIFO)のデータ構造を持つデータコレクションです。プログラムでの使用例としては、複数の処理要求を順番に処理する場合や、タスクのスケジューリングなどが挙げられます。
- 例えば、複数のユーザーからのリクエストを受け付けて、順番に処理する場合にキューが活用されます。この場合、先にリクエストが来たユーザーの処理が優先されます。キューは順序を保持するため、処理の順番が保証されます。
- また、業務アプリケーションでは、同時に処理される要求が複数あり、それぞれの処理が依存関係を持っている場合もあります。キューを使用することで、依存関係を保ちつつ、正確な順序で処理を行うことができます。キューは重要なデータ構造であり、プログラミングにおいては頻繁に使用されることがあります。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
すこし勘違いされていると思います。 >例えばAさんとBさんが同じ処理を行うボタンを押したとして、Aさんのリクエストが早ければAさんの >処理、Bさんのリクエストが早ければBさんの処理が先に行われる。 この『順番に処理される』というのは、内部でキューを使用しているからです。 キューやスタックは、処理を順番に行うという目的もありますが、「他の処理が終わるのを待つ」という目的もあります。 AさんとBさんが同時にボタンを押した場合、キューを使わなければ、「早い者勝ちで処理される」という部分は同じですが、 遅い人は処理を中止します。(順番に、とか、他の人が終わってから処理する、というようなことはありません。何も出来なくなります。)
その他の回答 (3)
- hitomura
- ベストアンサー率48% (325/664)
ならば >例えばAさんとBさんが同じ処理を行うボタンを押したとして、 >Aさんのリクエストが早ければAさんの処理、Bさんのリクエストが早ければBさんの処理が先に行われる。 というのを十万人に対して、しかも処理順を間違えることなく、さらに二重押しを防ぐため処理実行はともかくリクエストを受け取ったことを早期にボタンを押した人に返信する必要がある場合を考えてみてください。 そんな場合にキューを使って、とりあえずデータを受け取って返信するスレッドとキューの先頭のデータに対して処理をするスレッドを並走させればすっきりとしたシステムになりませんか? そして、オンライン予約システムってちょうど上記のような要求がされるシステムですよね?
補足
ご回答ありがとうございます。
- wormhole
- ベストアンサー率28% (1626/5665)
例えば、 ・メッセージを受信してキューに入れるスレッド ・キューにメッセージが入っていたら取り出して処理するスレッドを起動するスレッド という風にしてキューを利用すればメッセージを受信するスレッドは、メッセージに対する処理が終わるのをまたずにメッセージ受信処理ができます(キューがなかったらどうなるか考えてみてください)
補足
ご回答ありがとうございます。
- maiko0318
- ベストアンサー率21% (1483/6969)
キューはFIFO (先入れ先出しの待ち行列)と LIFO (後入れ先出しのスタック)があります。 例えばデータファイルを読んで(総行数を数えられる) 01/10 1行目 02/10 2行目 03/10 3行目 04/10 4行目 05/10 5行目 06/10 6行目 07/10 7行目 08/10 8行目 09/10 9行目 10/10 10行目 といった使い方ができます。 LIFOは 10/10 10行目 09/10 9行目 08/10 8行目 07/10 7行目 06/10 6行目 05/10 5行目 04/10 4行目 03/10 3行目 02/10 2行目 01/10 1行目 こんなこともできます。 データファイルと書きましたが、エディターを作るようなとき、 部分を指定して上下反転することができます。 apple char(01) 'りんご' orange char(04) 'みかん' grape char(05) 'グレープ' があったら apple char(01) orange char(04) grape char(05) apple 'りんご' orange 'みかん' grape 'グレープ' というような変換もできます。(データベースのテーブル作成で有効だったりする)
補足
ご回答ありがとうございます。
補足
>>遅い人は処理を中止します。(順番に、とか、他の人が終わってから処理する、というようなことはありません。何も出来なくなります。) このあたりの認識がありませんでした。キューは必須の概念なのですね。 ご回答ありがとうございました。