クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

キューでそれぞれの速さで働く

このレッスンのあとで: キューを使うと2つの部分がそれぞれの速さで働ける理由を説明できる。

45分のレッスンコマンドなし

3月の市役所に申請が集まる

ある市役所では、転入の届けをネットで受け付けています。届いた申請は、書類チェックの仕組みが1件ずつ確かめます。1分に20件まで処理できます。

3月の最後の週、朝9時には1分に80件の申請が届きます。

申請の画面がチェックの終わりを待っていたら、市民の画面は止まったままです。どうすれば良いでしょうか。

このレッスンのゴール

メモ

キューを使うと2つの部分がそれぞれの速さで働ける理由を説明できる。

今日のキーワード

ことばいみれい
キュー仕事を順番に待たせる列
メッセージキューに入れる1件の仕事申請 0301
送り手メッセージをキューに入れる部分
受け手メッセージを取り出して処理する部分
滞留数キューで待っているメッセージの数
ワーカー受け手として動く1つのプログラム

学生が入力するセルは、このプレビューでは空白です。

送り手と受け手の間にキューを置く

キューは、仕事を順番に待たせる列です。申請の画面は送り手です。申請をメッセージとしてキューに入れ、市民には「受け付けました」とすぐ返します。

書類チェックは受け手です。キューからいちばん古いメッセージを取り出し、確かめ終わったら次を取り出します。

どちらも、相手の終わりを待ちません。

試す: Pythonでキューを作る

コード: python
# キューとしてリストを使います。後ろに入れて、前から取り出します。
queue = []

# 申請の画面が3件入れて、市民にはすぐ返事をします
queue.append("申請 0301")
queue.append("申請 0302")
queue.append("申請 0303")
print("待っている数:", len(queue))

# 書類チェックが、いちばん古い1件を取り出します
job = queue.pop(0)
print("チェック中:", job)
print("待っている数:", len(queue))

# 「申請 0304」を入れてから、2件取り出しましょう。
# 最後にキューに残るのは、どの申請ですか。

滞留数は増えて、あとで減る

送り手と受け手は、別々の速さで動きます。届く数が処理できる数より多いと、滞留数が増えます。

昼になって申請が減ると、受け手が追いつきます。滞留数は少しずつ減り、0に戻ります。

待っている間も、メッセージは消えません。市民にはチェックの結果が少し遅れて届くだけです。

例: 朝の5分間の滞留数

時刻届いた数処理した数終わりの滞留数
9:00802060
9:018020120
9:023020130
9:031020120
9:04020100

学生が入力するセルは、このプレビューでは空白です。

よくある間違い

注意

キューを入れると処理が速くなる、と考える人は多いです。実際は、書類チェックは1分20件のままです。キューは、片方が相手を待たずに済むようにし、急な山を受け止めます。滞留数が毎日増え続けて減らないなら、受け手を増やす必要があります。

ワーカーを増やすと早く減る

受け手のプログラムは、いくつも同時に動かせます。1つ1つをワーカーといいます。ワーカーは、それぞれ別のメッセージを取り出します。

1分20件のワーカーが3つなら、合わせて1分60件です。

ワーカーが止まっても、メッセージはキューに残ります。直して動かし直せば、古い順に続きから処理します。

例: 600件たまったとき

ワーカーの数1分に処理する数0になるまで
12030分
24015分
36010分
51006分

学生が入力するセルは、このプレビューでは空白です。

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。