スレッド
スレッド
2つの業界で、それぞれ別の意味で使われています。
スレッド(実行単位)
thread
プログラムの中で処理を実行する最小の単位。一つのプロセス(実行中のプログラム)が複数のスレッドを持ち、メモリを共有しながら並行して動く。CPU のレジスタ(演算中の値を置く場所)などはスレッドごとに割り当てられる。
重い集計処理をメインスレッドで動かすと画面が固まるので、別スレッドに逃がしてください。
スレッド(投稿のまとまり)
thread
掲示板や SNS、メーリングリストで、一つの話題に属する発言や記事を一つの流れとしてまとめたもの。スレッド表示に対応したシステムは、関連する発言をスレッド単位で管理し、スレッドごとに分けて表示したり、スレッドを指定して書き込めるようにしたりする。
このスレッドは返信が千件を超えたので、次スレに移行します。
スレッドは、片方では並走し、片方では連なる
「重い集計はメインスレッドで動かさず、別スレッドに逃がして」。「このスレッドは千件を超えたので、次スレに移行します」。どちらもよく聞く台詞で、どちらの「スレッド」も糸の thread である。ところが前者は糸を一本足して同時に走らせる話で、後者は長くなりすぎた糸をいったん切って、新しく張り直す話だ。同じ糸なのに、なぜ片方は横に増え、片方は縦に延びるのだろうか。
プログラムの側から見る。糸にあたるのは、処理が順に進んでいく一本の流れである。一つのプロセスの中にこの流れが何本もあり、メモリは共有しつつ、CPU のレジスタ(演算中の値を置く場所)は一本ごとに持つ。糸が一本きりなら、重い処理が終わるまで画面は待つしかない。だから本数を増やす。順に進む流れという考え方そのものは古く、少なくとも1965年のバークレーの時分割システムまで遡れる。ただし当時は process と呼ばれていた(Serpentine「The History of Threads」、2005年)。
掲示板の糸は、進む流れではなく、返信のつながりである。1983年6月の RFC 850(Usenet の記事形式を定めた文書)は、返信記事に References という行を必須とした。そこには、その記事のきっかけになった記事の ID が並ぶ。返信への返信なら、元の行を写したうえで自分の親を足す。新しい話題を始めるときは、この行を付けてはならない。返信は先祖の名簿を携えて出ていき、名簿を持たない記事が新しい糸の根になる。
RFC 850 は、この行の目的を、記事を会話の単位でまとめられるようにすることだと書いている。糸をつなぐために仕様が用意したのは、この名簿である。
数えるものが違う、ということになる。プログラムでは、同時に何本走っているかが画面の固まり方を左右する。掲示板では、一本に何件つながっているかが問われ、千件を超えれば次の糸に結び直す。
私の見立てでは、「別スレッドに逃がして」と頼まれたら、糸は横に並ぶ。「次スレに移行します」と聞いたら、糸は縦に伸びる。