その時に書きたいものを書きます

その時に書きたいものを書くんです

Webアプリケーションは基本的にマルチスレッド?

という結論でいいらしい。

VBでDesktopアプリケーションしか作ってなかったせいか、スレッドという概念が欠落していた模様。

ちまたでよく「スレッドセーフ」という言葉を耳にして「なんのこっちゃ?」状態でした。

JavaでWebをやり始めてやっと「スレッドセーフ」という言葉が腹落ちした。

サーバのVM上でPlayframeworkのアプリケーションが動いているとする。 Playframeworkのスレッド数は、

DEVモード - 1
PRODモード - 環境で利用可能なCPU数 + 1

らしい。 (参考:Playframeworkとスレッド数 - フレクトのHeroku Lab)

PRODモードで、利用可能なCPUが4だった場合、5スレッド用意されることになる。

2つのクライアントから同一のactionに同時にアクセスが来た場合、Framework側が「こっちのアクセスはこっちのスレッド、こっちのアクセスはこっちのスレッドでやってね」っていうことをやってくれる。結果、同じメソッドが別スレッドで実行されることになる。

スレッドは別とはいえ、その2つのスレッドは同じVM上で動いており、static変数などは共有されることとなる。

ここで2つのスレッドからこの共有財産にアクセスしようとすると、不整合が起きてしまう可能性が出てくる。

シングルスレッドで問題なく処理が完了するWindowsのDesktopアプリケーションを作っているときには働かなかった頭だ。

だがやっと理解できた。

これからは注意してマルチスレッドを見ていこう。

しかしこういう基本的なところをわかりやすく説明してくれてるページが意外となかなか見つからなくて困る。