マルチプログラミング(並行処理)
マルチプログラミング
CPUは何もしていない時間に別のプログラムを処理させる。
別のプログラミングが処理している時間はCPUがあいているので、CPUが稼働して別のプログラミングの入出力処理をさせること。
並行処理
一つのプロセスにスレッドが複数存在するが、同時に処理ができないので、入れ替わりながら処理を行う。
CPUが何もしていない時間に別のプログラミングを処理することで、複数のプログラムを並行して同時に実行すること
並行して処理をする
並列処理
一つのプロセスにスレッドが複数存在し、同時に処理できる
処理が限界まで並列化されれば、サーバのCPU使用率は100%になります。
CPU使用率が高いのは良いことなのですが、高すぎる場合、今度は「サーバに余裕がなさすぎる!」と怒られてしまうことでしょう。
ただし、コアを複数のプロセスが取り合うことになるのでCPU使用率を制限するチューニングが必要
物理サーバーの CPU コア数が 4の場合、 物理コア数を超えるクエリを同時に実行して、クエリ応答が返るまで の時間は CPU 使用率が 100% に達する可能性があります。
C/C++ の様な Native コードや Java の様なスレッドセーフな言語は、立ち上げたスレッド数分、CPU の物理コア数を有効に利用できます。
https://scrapbox.io/files/65ea8bdbee443e0025262d69.png
https://scrapbox.io/files/65ea93e2aa009800263c2273.png
https://www.youtube.com/watch?v=et-cDFbVkQw
Pythonの場合、プロセスを並列処理させる。プロセスの中にスレッドがある。
Javaはプロセスの中でスレッドが並列処理で同時に動く。
Ruby / Python は GIL (Global Interpreter Lock) 機構により、 プロセス中で同時に実行できるスレッド数は常に1 に制限されています。
https://scrapbox.io/files/65ea9b54cd660d002438eb1a.png
https://scrapbox.io/files/65ea9b607616b20023f52f02.png
https://scrapbox.io/files/65ea9b85feb700002417efd4.png
https://www.youtube.com/watch?v=iiC0eJr_sgI