【すれっど】

スレッド とは?

最終更新:
💡 一つのプロセスの中に、複数の処理の流れ

プロセス内の処理の流れを表す実行単位。同じプロセスのスレッドはメモリなどを共有する。複数の処理を並行して進められ、複数コアなどの条件が整えば並列実行もできる。

📌 このページのポイント
プロセスの中に複数の流れ 一つのプロセス スレッドA 処理1 処理2 スレッドB 処理1 処理2 共有データ 複数の処理を並行して進められる 並列実行はコア数・実行環境などによる 共有データの読み書きには同期が必要
横の矢印は各スレッドの処理順、共有データへの線は読み書きの関係。複数コアなどの条件で並列実行できる場合がある。
ひよこ ひよこ
スレッドって何?
ペンギン先生 ペンギン先生
プロセスの中で進む、処理の流れの単位だよ。一つのプロセスに複数のスレッドを持たせられる。各スレッドは実行位置やスタックなどを持ち、同じプロセスのメモリや資源を共有するんだ。
ひよこ ひよこ
プロセスとどう違うの?
ペンギン先生 ペンギン先生
プロセスはそれぞれメモリ空間などの資源を持つよ。スレッドは同じプロセスの資源を共有するので、同じデータを使いやすい。その分、互いの処理が干渉しないように設計する必要がある。プロセスどうしも、共有メモリなどで連携できるよ。
ひよこ ひよこ
マルチスレッドなら、全部同時に計算するの?
ペンギン先生 ペンギン先生
一つのコアでは実行を切り替えて並行して進めるよ。複数コアなら並列実行できる場合がある。ただしGILが有効なCPythonでは、通常Pythonコードを実行するスレッドは一度に一つなんだ。I/O待ちを重ねる用途では、それでも役立つよ。
ひよこ ひよこ
何が難しいの?
ペンギン先生 ペンギン先生
共有データの読み書きが、タイミングによって意図しない結果になることだよ。たとえば二つのスレッドが残高100円を読んで50円ずつ引き、どちらも50円を書き戻すと、結果は0円にならない。ロックなどで読み取りから更新までを守る設計が必要なんだ。
ひよこ ひよこ
Web Workerもスレッドなの?
ペンギン先生 ペンギン先生
ブラウザで別の処理の流れを動かす仕組みだよ。通常はメッセージでデータを渡し、DOMを直接操作できない。SharedArrayBufferでメモリを共有することもできるので、その場合は同期を考える必要がある。非同期処理と並列計算は同じではないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「スレッド」って出てきたら「プロセスの中を進む処理の流れ」と思えばだいたいOK!
📖 おまけ:英語の意味
「Thread」 = 糸・処理の流れ
💬 プログラムの実行の流れを「糸」に例えた呼び方。同じプロセスで複数の流れを進められるよ

参考資料

← 用語集にもどる