次の記事では、Python の スレッドが何であるかを見てみましょう。 Python プロセスと、Python プログラミングで multi-threadedpython が果たせる役割について学びます。
#プロセスとスレッドの概念と違いの紹介1. スレッドの基本概念
概念スレッドは、プロセス内で操作を実行する最小単位です。これはプロセス内のエンティティであり、システムによって独立してスケジュールおよびディスパッチされる基本単位です。スレッド自体はシステム リソースを所有せず、一部のリソースのみを所有します。プロセスが所有するすべてのリソースは、同じプロセスに属する他のスレッドと共有できます。スレッドは別のスレッドを作成および破棄でき、同じプロセス内の複数のスレッドを同時に実行できます。
(1) スケジュールが立てやすい。
(2) 同時実行性を改善します。同時実行性は、スレッドを通じて簡単かつ効率的に実現できます。プロセスは複数のスレッドを作成して、同じプログラムの異なる部分を実行できます。
(3) オーバーヘッドが低い。スレッドの作成はプロセスの作成よりも高速で、必要なオーバーヘッドはほとんどありません。
2. プロセスの基本ステータスと状態間の関係
ステータス: 実行中、ブロック中、一時停止中、ブロック中、準備完了、 Hang Ready
状態間の遷移:
(1) Ready プロセスは CPU によって実行されるようにスケジュールされ、実行状態になります;
(2) 実行中のプロセスI/O リクエストを行うもの、またはリクエストされたリソースを取得できないものはブロックされます;
(3) 実行中のプロセスは、プロセスの実行が完了した (またはタイム スライスの有効期限が切れた) 後に準備完了になります;
(4) ブロックされたプロセスを一時停止ブロック状態にします ユーザーがプロセスを再起動する (ウェイクアップと呼ばれます) 前にプロセスのブロックの原因となった I/O 操作が完了すると、一時停止されたブロック状態は一時停止になります。準備完了状態。I/O 操作が完了する前にユーザーがプロセスを再起動すると、一時停止されていたブロック状態がブロック状態になります。
(5) 準備完了 (または実行中) のプロセスを一時停止し、ブロック状態になります。 . プロセスが再開されると、一時停止されていた準備完了状態が準備完了になります;
3. スレッドとプロセスの関係と違いは何ですか?
プロセスとスレッドの関係:
(1) スレッドは 1 つのプロセスにのみ属することができ、プロセスは複数のスレッドを持つことができますが、少なくとも 1 つのスレッドが存在します。
(2) リソースはプロセスに割り当てられ、同じプロセスのすべてのスレッドがプロセスのすべてのリソースを共有します。
(3) プロセッサはスレッドに割り当てられます、つまり、スレッドは実際にプロセッサ上で実行されます
(4) スレッドの実行中には、協調的な同期が必要です。異なるプロセスのスレッドは、同期を達成するためにメッセージ通信を使用する必要があります。スレッドはプロセス内の実行単位を指し、プロセス内でスケジュール可能なエンティティでもあります。
プロセスとスレッドの違い:
(1) スケジューリング: スレッドは基本ですスケジューリングと割り当ての単位。プロセスはリソース所有権の基本単位です。
#(2) 同時実行性: プロセスを同時に実行できるだけでなく、同じプロセスの複数のスレッドを同時に実行することもできます(3) リソースの所有権: プロセスはリソースを所有する独立した単位です. スレッドはシステムリソースを所有しませんが, プロセスに属するリソースにアクセスできます. (4) システムオーバーヘッド: 作成時またはキャンセル時リソースの割り当てとリサイクルにより、システムのオーバーヘッドが、スレッドの作成またはキャンセル時のオーバーヘッドよりも大幅に大きくなります。4. プロセス間で通信するにはどうすればよいですか?
(1) パイプと名前付きパイプ: パイプは、アフィニティを持つ親プロセスと子プロセス間の通信に使用できます。名前付きパイプは、パイプの機能に加えて、関係のないリレーショナル プロセス間の通信も可能にします。 。
(2) シグナル: シグナルは、ソフトウェア レベルでの割り込みメカニズムのシミュレーションです。特定のイベントが発生したことをプロセスに通知するために使用される比較的複雑な通信方法です。プロセスは、その効果を受け取ります。信号と割り込み要求を受信するプロセッサは一貫していると言えます。
(3) メッセージ キュー (メッセージ キュー): メッセージ キューは、メッセージのリンク リストです。前の 2 つの通信方法における制限されたセマフォの欠点を克服します。書き込み権限を持つプロセスは、メッセージをメッセージに送信できます。新しい情報がメッセージ キューに追加され、メッセージ キューに対する読み取り権限を持つプロセスは、メッセージ キューから情報を読み取ることができます。
(4) 共有メモリ: 最も有用なプロセス間通信方式と言えます。これにより、複数のプロセスが同じメモリ空間にアクセスできるようになり、異なるプロセスが互いのプロセスの共有メモリ内のデータの更新をタイムリーに確認できるようになります。この方法では、ミューテックス ロックやセマフォなど、ある種の同期操作が必要です。
(5) セマフォ: 主にプロセス間および同じプロセスの異なるスレッド間の同期と相互排除の手段として使用されます。
(6) ソケット: これはより一般的なプロセス間通信メカニズムであり、ネットワーク内の異なるマシン間のプロセス間通信に使用でき、広く使用されています。
5. 同期と相互排除の違い:
複数のスレッドがある場合、同じデータまたはリソースにアクセスするためにこれらのスレッドを同期する必要があることがよくあります。たとえば、1 つのスレッドを使用してファイルをメモリに読み取り、別のスレッドを使用してファイル内の文字数をカウントするプログラムがあるとします。もちろん、メモリにロードされるまでファイル全体をカウントしても意味がありません。ただし、各操作には独自のスレッドがあるため、オペレーティング システムは 2 つのスレッドを独立したタスクとして扱い、別々に実行するため、ファイル全体をメモリにロードしなくてもワードをカウントできます。この問題を解決するには、両方のスレッドを同期して動作させる必要があります。
いわゆる同期とは、異なるプロセス間を移動するいくつかのプログラムの断片を指します。それらの操作は、特定の指定された順序に従って厳密に実行される必要があります。この順序は、完了する特定のタスクによって異なります。リソースへのアクセスという観点から定義すると、同期とは、(ほとんどの場合) 相互排他に基づいた他のメカニズムを介した訪問者によるリソースへの秩序あるアクセスを指します。ほとんどの場合、特にリソースへのすべての書き込みが相互排他的である必要がある場合、同期ではすでに相互排他が実装されています。まれに、複数の訪問者が同時にリソースにアクセスできることがあります。
いわゆる相互排他とは、異なるプロセス間に分散されたいくつかのプログラム フラグメントを指します。プロセスがプログラム フラグメントの 1 つを実行すると、他のプロセスはそれらを実行できなくなります。プロセスの実行が終了するまで待つことしかできません。このプログラムの一部を実行する前に確認してください。リソースへのアクセスによって定義されている場合、相互排他的なリソースでは同時に 1 人の訪問者のみがアクセスでき、これは一意かつ排他的です。ただし、相互排除では、訪問者がリソースにアクセスする順序を制限することはできません。つまり、アクセスには順序がありません。
以上がこの記事の内容です。この記事では主に python の threads に関する知識を中心に紹介します。理解に役立てていただければ幸いです。と上で言われています。この記事で説明したことがあなたのお役に立ち、Python の学習が容易になることを願っています。 関連知識の詳細については、php 中国語 Web サイトの
Python チュートリアル以上がPythonのスレッドとは何ですか?概念と利点のまとめの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。