わかりやすく スレッド とは
一つの仕事をいくつもの流れに分けて、同じ作業場で同時に進めることができます。その流れがスレッドです。
一人で何本もの手を
料理人が一人、台所で働いています。スープを煮ながら野菜を切り、ときどき火の様子も見ます。
仕事は料理一つなのに、その中でいくつもの流れを同時にこなしているのです。台所も一つ、材料棚も一つで、みんなで使います。
コンピュータも、一つの作業の中でこうしていくつもの流れに分けて働けます。その流れ一本一本を、スレッドと呼びます。
流れを分けておけば、スープが煮えるのを待つあいだも手を休めず、別の流れをこなせます。
仕事は一つ、その中の流れはいくつも。作業場と材料は共有します。
スレッドとは、一つの作業の中で同時に進む、いくつもの流れのことです。
他人どうしの二軒と、一軒の中のいくつもの部屋
前に、プロセスはそれぞれ自分の空間を別々に持つと話しました。二つのプロセスは、塀をはさんだお隣どうしのようなもので、勝手に入ることはできません。
ところが一つのプロセスの中のスレッドたちは、一軒の家に住む家族のようなものです。部屋は分かれていても、居間と冷蔵庫は共有します。
だからスレッドどうしは、情報をやりとりしやすいのです。同じ材料棚を見ているからです。プロセスどうしでは、それがもっと手間です。
塀は面倒に見えても、お隣で水もれがあってもわが家はぬれないように守ってくれる、ありがたい壁でもあります。
プロセスは塀をはさんだお隣、スレッドは一軒の家の家族です。
プロセスは空間を別々に使い、一つのプロセスの中のスレッドたちは空間を共有します。
流れを増やしてみる
一つの作業をいくつの流れに分けるか、自分で変えてみましょう。
流れが一本なら、仕事を順番に一つずつこなします。流れを増やすと、みんなが同じ材料棚を見ながら、いくつもの部分が同時に進みます。
流れが多くなると、仕事が早く終わることがあります。ただ、みんなが同じ台所を使うので、多すぎるとおたがいの道をふさいでしまいます。
流れを二倍にしても仕事がちょうど二倍速くなるわけではないのは、狭い台所でおたがいに道をゆずる時間が増えるからです。
流れの数を変えると、一つの作業がどう分かれて進むかがわかります。
流れを増やすと同時に多く進みますが、同じ空間を分け合うことは変わりません。
共有すると速いけれど
スレッドたちが材料棚を共有するのは、大きな利点です。別々に運んだり写したりしなくても同じものをすぐ見られるので、軽くて速いのです。
でも裏の面もあります。二つの流れが同じ瞬間に同じ材料に触ろうとすると、ぶつかることがあります。片方が塩を入れているあいだに、もう片方も入れてしまうようなことです。
だから共有は便利ですが、いつだれが触るかには少し注意が必要です。この話は、少しあとの競合状態のレッスンで続きます。
それでも共有を選ぶのは、流れごとに材料棚を別にコピーしておくと、そのほうが重くて遅いからです。
共有は軽くて速いですが、同時に同じものに触るとぶつかります。
空間を共有すると速くて軽いですが、同じものに同時に触ると問題が起きることがあります。
一枚にまとめる
覚えておくことは三つだけです。
一つ目、スレッドは一つの作業の中のいくつもの流れです。仕事は一つでも、その中でいくつもの部分が同時に進みます。
二つ目、同じ空間を分け合います。プロセスどうしのあいだには塀がありますが、一つのプロセスの中のスレッドたちは同じ材料棚を見ます。三つ目、だから軽くて速いけれど、注意も必要です。同じものに同時に触るとぶつかることがあるからです。
この三つがわかれば、あるアプリが一本の流れで画面を動かしながら、別の流れで裏で静かに働いて、止まらずに反応できる理由が見えてきます。
一つの作業の中のいくつもの流れ、空間の共有、軽いけれど注意。