Python マルチスレッドの概要学習マニュアル
Published on 2023-04-20 00:10:05 · 中文 · English · بالعربية · Español · हिंदीName · Русский язык · 中文繁體
同時実行とは
簡単に言うと、同時実行とは、2 つ以上のイベントが同時に発生することです。 同時実行は、多くのイベントが常に同時に発生するため、自然現象です。
プログラミング用語では、同時実行とは、実行中の 2 つのタスクの重複を指します。 並行プログラミングを使用すると、前の要求が完了するのを待たずに要求を同時に処理できるため、アプリケーションとソフトウェアシステムのパフォーマンスを向上させることができます。
並行性の歴史的レビュー
次のポイントは、並行性の簡単な歴史的レビューを提供します。
鉄道の概念から始める
並行性は鉄道の概念と密接に関連しています。 鉄道では、各列車が安全に目的地に到着することができるように、複数の列車を同じ鉄道システムで処理する必要があります。
アカデミアにおける並列コンピューティング
コンピュータサイエンスの並行性への関心は、1965年にEdsger W. Dijkstraによって発表された研究論文から始まりました。 このホワイト ペーパーでは、同時実行制御の性質であるミューテックスの問題を特定して解決します。
高度な同時実行プリミティブ
近年、プログラマは高度な同時実行プリミティブの導入により、改善された並行性ソリューションを獲得しています。
プログラミング言語の同時実行性の向上
GoogleのGolang、Rust、Pythonなどのプログラミング言語は、より良い並列ソリューションを得るのに役立つ分野で信じられないほどの進歩を遂げました。
スレッドとマルチスレッドとは何ですか?
スレッドは、オペレーティング システムで実行できる実行の最小単位です。 プログラム自体ではなく、プログラム内で実行されます。 つまり、スレッドは互いに独立していません。 各スレッドは、コードセグメント、データセグメントなどを他のスレッドと共有します。 これらは、軽量プロセスとも呼ばれます。
スレッドは、次のコンポーネントで構成されます。
次の実行可能命令のアドレスで構成されるプログラムカウンタ
スタック
レジスタのセット
一意の ID
一方
マルチスレッドは、複数のスレッドを同時に実行することにより、オペレーティングシステムの使用状況を管理するCPUの機能です。 マルチスレッドの主なアイデアは、プロセスを複数のスレッドに分割して並列処理を実現することです。 次の例は、マルチスレッドの概念を示しています。
例
MS Wordを開いて入力する特定のプロセスを実行しているとします。 一方のスレッドはMS Wordを開くために割り当てられ、もう一方のスレッドはそれを入力する必要があります。 ここで、既存のスレッドを編集する場合は、編集タスクを実行するために別のスレッドが必要になります。
プロセスとマルチプロセッシングとは
ある
プロセスは、システムに実装される作業の基本単位を表すエンティティとして定義されます。 要するに、コンピュータプログラムをテキストファイルに記述し、それを実行すると、プログラムに記載されているすべてのタスクを実行するプロセスになります。 プロセスのライフサイクルでは、開始、準備完了、実行、待機、終了のさまざまなフェーズを経ます。
下の図は、プロセスのさまざまな段階を示しています。
プロセスは、1 つのスレッド (メイン スレッドと呼ばれます) のみを持つことも、独自のレジスタ、プログラム カウンター、およびスタックのセットを持つ複数のスレッドを持つこともできます。 下の画像は違いを示しています-
另一方面,
マルチプロセッシングとは、1 つのコンピューター システムで 2 つ以上の CPU ユニットを使用することです。 私たちの主な目標は、ハードウェアから最大限の可能性を引き出すことです。 これを行うには、コンピュータシステムで使用可能なCPUコアの総数を利用する必要があります。 マルチプロセッシングが最善のアプローチです。
Pythonは最も人気のあるプログラミング言語の1つです。 同時アプリケーションに適している理由は次のとおりです。
文法的な砂糖
文法砂糖は、物事を読みやすくしたり表現したりできるようにすることを目的としたプログラミング言語の文法です。 それは言語を人間の使用のために「甘い」ものにします:物事はより明確かつ簡潔に、または好みに応じて他のスタイルで表現することができます。 Python には、オブジェクトに作用するように定義できる Magic メソッドが付属しています。 構文上の砂糖として、よりわかりやすいキーワードをバンドルしています。
大規模なコミュニティ
Python言語は、AI、機械学習、ディープラーニング、定量分析などの分野のデータサイエンティストや数学者に広く採用されています。
並列プログラミングに役立つAPI
Python 2 と 3 には、並列/並行プログラミング専用の API が多数あります。 それらの中で最も人気があります:
スレッド、並行性機能、マルチプロセッシング、非同期、gevent、グリーンレットなど。
同時実行アプリケーションの実装における Python の制限
Python には同時実行アプリケーションの制限があります。 この制限は、
GIL (Global Interpreter Locking) は Python に存在します。 GILでは、CPUの複数のコアを利用できないため、Pythonには実際のスレッドがないと言えます。 GILの概念は次のように理解できます。
GIL (グローバルインタプリタロック)
これは、Pythonの世界で最も物議を醸しているトピックの1つです。 CPythonでは、GILはミューテックスミューテックスであり、スレッドセーフになります。 言い換えれば、GILは複数のスレッドがPythonコードを並行して実行することを妨げていると言えます。 ロックは一度に1つのスレッドによってのみ保持でき、スレッドを実行する場合は、最初にロックを取得する必要があります。 以下に示す図は、GILの作業を理解するのに役立ちます。
ただし、Pythonにはいくつかのライブラリと実装があります。
Numpy, Jpython and
アイアンピットボン。 これらのライブラリは、GIL との対話なしで動作します。