プロセスとスレッドって何?
まずタスクってよく言う。マルチタスクとか(音楽聞きながら勉強する)
それと同じで、ググりながらパワポ作ったりすると2つのタスクが同時進行している。
1個のタスクが1個のプロセスを生み出す。タスク=プロセスとして考える。
1タスク(1プロセス)の中に処理しないといけないことを細かく分解していったものがスレッド。
例えば現実で漢字勉強というタスクがあれば、それを処理に分けると
漢字勉強(タスク,プロセス)
- ひらがなを理解する(スレッド1)
- 漢字の意味を理解する(スレッド2)
- 漢字の書き方を理解する(スレッド3)
みたいな感じ。
それがOSからみたら色々なアプリに対してもあるってこと。
プロセスがメモリを確保しスレッド達がCPUにあれして、これしてと言う。
CPUのスペックをみると8コア16スレッドみたいに書かれているのもこれのこと。
1コアのなかでマルチスレッドの処理ができるのが現在当たり前。
並行処理と並列処理
並列、並行、ほぼ同じことを言ってるようで全然違う。日本語ってむずい。
スレッドがCPUコアに処理を頼む。その際、CPUのコア数に応じて並列で処理できる数が異なる。
コア数が多いCPUが高性能のため値段が高い。
マルチコアの処理は、マジの同時処理。
コア1~4で処理(スレッド)が同時に並列に処理されている。
スレッドにも処理するのにかかる時間はバラバラ。すぐ終わるものからめっちゃ時間食うものまで。
じゃあ、コア2に最初に入った処理がめちゃくちゃ時間かかるやつだったら、それまでコア2はその処理でずっと使われるのか?
それとも適度にスレッドを切り替えながら満遍なく処理を行うのか?
普段PCではスレッドを切り替えながら満遍なく処理を行っている。
これを並行処理。実際は同時に処理はされていないのだけど、処理スピードが異常なので普段PCを触っていて同時に処理されているように感じる。だけど実際は1コアの中で複数のスレッドを切り替え処理を行っている。
同期処理と非同期処理
同期処理はプログラムを上から順番に実行していく。
対して非同期処理は上から順番に実行されるとは限らない。
参考