スレッドとプロセス
スレッドとプロセスはオペレーティング システムの用語であり、簡単に言えば、各アプリケーションには独自のプロセスがあります。
オペレーティング システムは、メモリ空間などの実行リソースをこれらのプロセスに割り当てます。このプロセスでは、いくつかのスレッドが作成され、これらのメモリ空間を共有し、並列計算のためにオペレーティング システムによって呼び出されます。
Mac OS X、UNIX、Linux、Windows などの最新のオペレーティング システムでは、複数のタスクを同時に実行できることは誰もが知っています。たとえば、ブラウザを使用してインターネットをサーフィンし、コードを入力し、Markdown でブログを書いているとします。これはマルチタスクであり、少なくとも 3 つのタスクが同時に実行されます。もちろん、バックグラウンドで同時に多くのタスクが静かに実行されていますが、それらはデスクトップには表示されません。オペレーティング システムの場合、タスクはプロセスです。たとえば、ブラウザを開くことはブラウザ プロセスの開始を意味し、PyCharm を開くことは PtCharm プロセスの開始を意味し、Markdown を開くことは Md プロセスの開始を意味します。
マルチコア CPU は現在非常に人気がありますが。ただし、CPU の実行コードは順次実行されるため、この時点で、シングルコア CPU が複数のタスクをどのように実行するのかという疑問が生じます。
実際には、オペレーティング システムは各タスクを交互に実行します。タスク 1 は 0.01 秒間実行され、タスク 2 に切り替わり、タスク 2 は 0.01 秒間実行され、その後タスク 3 に切り替わり、0.01 秒間実行されます。 0.01 秒...など続きます。表面的には各タスクが交互に実行されていますが、CPU の実行速度が非常に速いため、肉眼では認識できず、すべてのタスクが同時に実行されているように感じられます。
マルチタスクの真の並列実行は、マルチコア CPU でのみ実現できます。ただし、タスクの数は CPU コアの数をはるかに超えるため、オペレーティング システムは多くのタスクを順番に自動的にスケジュールします。 . 各コアで実行します。
一部のプロセスは、ブラウザなど 1 つのことだけを目的としたものではありません。ビデオの再生、音声の再生、記事の読み取り、記事の編集などを行うことができます。実際、これらはすべてブラウザのプロセス内にあります。で 。プロセス内で複数のことを同時に実行したい場合は、複数の「サブタスク」を同時に実行する必要があります。プロセス スレッド内でこれらを「サブタスク」と呼びます。
各プロセスは少なくとも 1 つのことを実行する必要があるため、プロセスには少なくとも 1 つのスレッドがあります。もちろん、プロセスには複数のスレッドを含めることもでき、複数のスレッドを同時に実行することもできます。マルチスレッドの実行方法は複数のプロセスの実行方法と同じです。オペレーティング システムも複数のスレッドを素早く切り替え、それぞれのスレッドを許可します。一時的に実行するスレッドを交互に実行すると、同時に実行されたように見えます。
では、Python で複数のタスクを同時に実行したい場合はどうすればよいでしょうか?
解決策は 2 つあります:
1 つは、複数のプロセスを開始することです。各プロセスにはスレッドが 1 つしかありませんが、複数のプロセスは複数のタスクを一緒に実行できます。
もう 1 つの方法は、プロセスを開始し、1 つのプロセス内で複数のスレッドを開始して、複数のスレッドが複数のタスクを一緒に実行できるようにすることです。
もちろん、3 番目の方法もあります。これは、複数のプロセスを開始し、各プロセスが複数のスレッドを開始して、より多くのタスクを同時に実行できるようにします。もちろん、このモデルはより複雑で、次のような環境ではほとんど使用されません。練習する。
要約すると、マルチタスクを実装するには 3 つの方法があります:
マルチプロセス モード、
マルチスレッド モード、
マルチプロセス マルチスレッド モード。
複数のタスクを同時に実行します。通常、タスクは無関係ではありませんが、相互に通信して調整する必要があります。場合によっては、タスク 1 を一時停止して、タスク 2 が完了するまで待機しないと続行できません。タスク 3 とタスク 4 は同時に実行できない場合があるため、マルチプロセスおよびマルチスレッド プログラムの複雑さは、前に作成した単一プロセスおよび単一スレッドのプログラムよりもはるかに高くなります。
非常に複雑でデバッグが難しいため、必要がない限りマルチタスクを書きたくありません。ただし、マルチタスクなしでは実行できない場合も多くあります。コンピュータで映画を見ることを考えてください。1 つのスレッドでビデオを再生し、別のスレッドでオーディオを再生する必要があります。それ以外の場合、単一のスレッドで実装されている場合は、ビデオを最初に再生してからオーディオを再生するか、オーディオを最初に再生してからオーディオを再生する必要があります。次にビデオですが、これは明らかに不可能です。