用語

スレッド

スレッド

2つの業界で、それぞれ別の意味で使われています。

IT・システム開発

スレッド(実行単位)

thread

プログラムの中で処理を実行する最小の単位。一つのプロセス(実行中のプログラム)が複数のスレッドを持ち、メモリを共有しながら並行して動く。CPU のレジスタ(演算中の値を置く場所)などはスレッドごとに割り当てられる。

重い集計処理をメインスレッドで動かすと画面が固まるので、別スレッドに逃がしてください。

Webサービス・SaaS・アプリ

スレッド(投稿のまとまり)

thread

掲示板や SNS、メーリングリストで、一つの話題に属する発言や記事を一つの流れとしてまとめたもの。スレッド表示に対応したシステムは、関連する発言をスレッド単位で管理し、スレッドごとに分けて表示したり、スレッドを指定して書き込めるようにしたりする。

このスレッドは返信が千件を超えたので、次スレに移行します。

スレッドは、片方では並走し、片方では連なる

「重い集計はメインスレッドで動かさず、別スレッドに逃がして」。「このスレッドは千件を超えたので、次スレに移行します」。どちらもよく聞く台詞で、どちらの「スレッド」も糸の thread である。ところが前者は糸を一本足して同時に走らせる話で、後者は長くなりすぎた糸をいったん切って、新しく張り直す話だ。同じ糸なのに、なぜ片方は横に増え、片方は縦に延びるのだろうか。

プログラムの側から見る。糸にあたるのは、処理が順に進んでいく一本の流れである。一つのプロセスの中にこの流れが何本もあり、メモリは共有しつつ、CPU のレジスタ(演算中の値を置く場所)は一本ごとに持つ。糸が一本きりなら、重い処理が終わるまで画面は待つしかない。だから本数を増やす。順に進む流れという考え方そのものは古く、少なくとも1965年のバークレーの時分割システムまで遡れる。ただし当時は process と呼ばれていた(Serpentine「The History of Threads」、2005年)。

掲示板の糸は、進む流れではなく、返信のつながりである。1983年6月の RFC 850(Usenet の記事形式を定めた文書)は、返信記事に References という行を必須とした。そこには、その記事のきっかけになった記事の ID が並ぶ。返信への返信なら、元の行を写したうえで自分の親を足す。新しい話題を始めるときは、この行を付けてはならない。返信は先祖の名簿を携えて出ていき、名簿を持たない記事が新しい糸の根になる。

RFC 850 は、この行の目的を、記事を会話の単位でまとめられるようにすることだと書いている。糸をつなぐために仕様が用意したのは、この名簿である。

数えるものが違う、ということになる。プログラムでは、同時に何本走っているかが画面の固まり方を左右する。掲示板では、一本に何件つながっているかが問われ、千件を超えれば次の糸に結び直す。

私の見立てでは、「別スレッドに逃がして」と頼まれたら、糸は横に並ぶ。「次スレに移行します」と聞いたら、糸は縦に伸びる。