Concurrency-in-python-introduction
Pythonの同時実行性-はじめに
この章では、Pythonの並行性の概念を理解し、さまざまなスレッドとプロセスについて学習します。
並行性とは何ですか?
簡単に言えば、並行性とは、同時に2つ以上のイベントが発生することです。 多くのイベントが同時に発生するため、同時実行は自然現象です。
プログラミングに関して言えば、並行性とは、実行時に2つのタスクが重複することです。 並行プログラミングを使用すると、以前の要求が完了するのを待たずに要求を同時に処理できるため、アプリケーションとソフトウェアシステムのパフォーマンスを向上させることができます。
同時実行の履歴レビュー
次のポイントは、並行性の簡単な歴史的レビューを提供します-
鉄道の概念から
並行性は、鉄道の概念と密接に関連しています。 鉄道では、すべての列車が目的地に安全に到着するように、同じ鉄道システムで複数の列車を処理する必要がありました。
学界でのコンカレントコンピューティング
コンピューターサイエンスの並行性への関心は、エドガーWが発行した研究論文から始まりました 1965年のダイクストラ。 この論文では、同時実行制御の特性である相互排除の問題を特定し、解決しました。
高レベルの並行処理プリミティブ
最近では、プログラマーは、高レベルの並行処理プリミティブの導入により、並行ソリューションを改善しています。
プログラミング言語との並行性の改善
GoogleのGolang、Rust、Pythonなどのプログラミング言語は、より優れた並行ソリューションを実現するのに役立つ分野で驚くべき開発を行ってきました。
スレッドとマルチスレッドとは何ですか?
- スレッド*は、オペレーティングシステムで実行できる実行の最小単位です。 それ自体はプログラムではなく、プログラム内で実行されます。 つまり、スレッドは互いに独立していません。 各スレッドはコードセクション、データセクションなどを共有します。 他のスレッドと。 軽量プロセスとも呼ばれます。
スレッドは、次のコンポーネントで構成されています-
- 次の実行可能命令のアドレスで構成されるプログラムカウンター
- スタック
- レジスタのセット
- 一意のID
一方、*マルチスレッド*は、複数のスレッドを同時に実行することでオペレーティングシステムの使用を管理するCPUの機能です。 マルチスレッドの主なアイデアは、プロセスを複数のスレッドに分割することで並列処理を実現することです。 マルチスレッドの概念は、次の例を使用して理解できます。
例
MS Wordを開いてコンテンツを入力する特定のプロセスを実行しているとします。 MS Wordを開くために1つのスレッドが割り当てられ、その中にコンテンツを入力するために別のスレッドが必要になります。 そして今、既存のものを編集したい場合、編集タスクなどを行うために別のスレッドが必要になります。
プロセスとマルチプロセッシングとは何ですか?
A プロセスは、システムに実装される基本的な作業単位を表すエンティティとして定義されます。 簡単に言えば、コンピュータープログラムをテキストファイルに記述し、このプログラムを実行すると、プログラムで言及されているすべてのタスクを実行するプロセスになります。 プロセスのライフサイクル中に、開始、準備完了、実行中、待機、終了のさまざまな段階を通過します。
次の図は、プロセスのさまざまな段階を示しています-
プロセスには、プライマリスレッドと呼ばれる1つのスレッドのみ、または独自のレジスタセット、プログラムカウンター、スタックを持つ複数のスレッドを含めることができます。 次の図は、違いを示しています-
一方、*マルチプロセッシング*は、単一のコンピューターシステム内で2つ以上のCPUユニットを使用することです。 私たちの主な目標は、ハードウェアから最大限の可能性を引き出すことです。 これを実現するには、コンピューターシステムで利用可能なCPUコアをすべて利用する必要があります。 そのためには、マルチプロセッシングが最適なアプローチです。
Pythonは最も人気のあるプログラミング言語の1つです。 以下は、同時アプリケーションに適したいくつかの理由です-
構文糖
構文シュガーは、物を読みやすくしたり表現したりしやすくするように設計されたプログラミング言語内の構文です。 これにより、人間が使用する言語が「甘く」なります。物事をより明確に、より簡潔に、または好みに基づいた代替スタイルで表現できます。 Pythonには、オブジェクトに作用するように定義できるMagicメソッドが付属しています。 これらのMagicメソッドは構文糖として使用され、よりわかりやすいキーワードにバインドされています。
大規模なコミュニティ
Python言語は、AI、機械学習、深層学習、および定量分析の分野で働いており、データサイエンティストや数学者の間で大規模な採用率を示しています。
並行プログラミングに役立つAPI
Python 2および3には、並列/並行プログラミング専用のAPIが多数あります。 それらの中で最も人気があるのは、*スレッド、concurrent.features、マルチプロセッシング、asyncio、geventおよびgreenlets *などです。
並行アプリケーションの実装におけるPythonの制限
Pythonには、並行アプリケーションに対する制限があります。 この制限は* GIL(Global Interpreter Lock)*と呼ばれ、Python内に存在します。 GILでは、CPUの複数のコアを使用することはできません。したがって、Pythonには真のスレッドは存在しないと言えます。 私たちは次のようにGILの概念を理解することができます-
GIL(グローバルインタープリターロック)
Pythonの世界で最も物議を醸すトピックの1つです。 CPythonでは、GILは相互排他ロックです。これは、物事をスレッドセーフにします。 言い換えれば、GILは、複数のスレッドがPythonコードを並行して実行するのを防ぐと言えます。 ロックは一度に1つのスレッドのみが保持でき、スレッドを実行する場合は、最初にロックを取得する必要があります。 以下に示す図は、GILの動作を理解するのに役立ちます。
ただし、Pythonには Numpy、Jpython 、 IronPytbhon などのライブラリと実装があります。これらのライブラリはGILとの対話なしで機能します。