WebシステムでJava、ASP.Net、PHP(Laravel)、Ruby(Rails)のシステムの違いについてお聞かせください。
JavaやASP.Net(MVCまたはCoreだが以降はASP.Netで書きます)はスレッドベース、PHPはプロセスベースだと聞きました。
質問1.
- ASP.Netは、サーバーの.NetFramework上でexeファイルを起動しずっと起動している、つまりstaticな変数の値を保持している
- PHPやRubyはWebからリクエストがあった段階でプログラムが起動し、処理が終了すると停止するのでstaticな変数でも破棄される
これは以下の出展からそう感じました。
https://www.slideshare.net/ssuser741a3c/phpjava-82696204
上記の41~44です。
引用しますと
Java(tomcat)はスレッドベースなので 自身のプログラム自体にキャッシュすることが出来た
static変数にキャッシュした
この結果「キャッシュサーバー」なしで運用も問題なく出来た
このスライド作成をした方のご意見なので正しくない可能性もありますが、JavaやASP.netではずっとstatic変数を保持しているものだと感じました。
これは合っているのでしょうか?
質問2.
そうすると、JavaやASP.Netはクライアントからリクエストがあったら即時に処理を返せる気がします。
また、変数に値を保持しているのでキャッシュのようにメモリから即レスポンスを返せる気がします。
「ずっと起動しているので処理が速い」「コンパイルしているのでそもそも速い」という感じでしょうか?
またそういう意味でPHPやRubyは大規模アプリにおいて動作が遅い感じでしょうか?
質問3.
JavaやASP.Netが一つ起動しているとして、そこに多くのクライアントから多くのリクエストが来た場合、一つのスレッドで処理するのでしょうか?
それともJavaやASP.Netはその処理分だけスレッドが起動する感じでしょうか?
変数に値を保持するといっても、クライアント毎に値が違うのでちょっとここがわかりません。
PHPやRubyでは、プロセスベースなのでクライアントからリクエストがあった段階でその都度プロセスが起動するのでクライアント毎(セッション毎)に
そもそもプロセスが違うのでセッション間で変数を共有することはないので問題ないのは理解しています。
質問4.
phpやRubyは基本的に処理が終わったら停止するのでWebサーバーの再起動くらいしか管理しなくていい気がしています。
しかしJavaやASP.Netでは実行ファイルがずっと起動しているのでメモリリークを起こしたりする心配があります。
そういう場合は実行ファイルを再起動することで対応するのでしょうか?
以上になりますが、質問内容に不備などありましたらご指摘いただけたらと思います。
どうぞよろしくお願い致します。
追記依頼の内容になります。
プログラムはコードの集まりであってコンピュータに対する命令(処理)を記述したもの、実行ファイルはコンパイルされた後のオブジェクトコードが記載されているファイル、またはコンピュータがプログラムとして解釈実行できるファイルのことです。
問題・課題
Webシステムを作る方法として、システムや基盤となるプログラム言語、フレームワークの選定をしたいと考えています。
まだ何もシステムを作っていなく計画段階なので具体的にコードでこの処理が困っているというわけではないのですが、インタプリタ言語とコンパイル言語で
それぞれ言語によって使うフレームワークも違うので一概にメリット・デメリットは難しいかもしれませんが、どのような仕組みの違いがあって、それがシステムにどのように影響がありメリットやデメリットがあるかを知りたいと考えています。