私はツイスト ライブラリを初めて使用し、python/twisted での操作が非同期で実行される方法を理解しようとしています。これまでのところ、GUI に似た (Qt または JavaScript) プラットフォームのみがイベント駆動型アーキテクチャを広く使用していると考えていました。
事実:
- ねじれたプログラムは 1 つのスレッドで実行される = マルチスレッドなし
- リアクターおよび遅延パターンが使用されます。コールバック/エラーバックが宣言され、すべての実行がリアクターのメイン ループによって制御されます。
- 単一の CPU は、プロセス間でリソースを共有するため、真に並列に何かを実行することはできません。コードの並列実行とは、プログラミング プラットフォーム (python、javascript など) が複数の一連の操作を実行することを意味します (これは実行可能であり、たとえば、マルチスレッドの使用)
質問1
Python は、オペレーティング システムの高レベルのラッパーと見なすことができます。非同期操作の処理を提供する OS 関数 (または C 関数) は何ですか? いずれかがあります?
質問2
Q1 は、twisted の非同期性は Javascript のような真の非同期性ではないという考えに私を導きます。たとえば、JavaScript で 3 つの異なるボタンを提供し、それらにコールバック関数をアタッチして、3 つのボタンすべてをクリックすると、3 つのコールバックが並行して実行されます。まさに平行。
Twisted では、私が理解している限り、それは真の非同期性ではありません。たとえば、操作が並列に実行されないため (コードに関しては、事実 3 で述べたように)、代わりに近似非同期性と言えます。Twisted では、コードの最初の n 行 (プロトコル、ファクトリ、接続などを定義する) は、システム全体が起動したときに何が起こるかの宣言です。これまでのところ何も実行されません。実際の実行が開始されてから、reactor.run()
が起動されます。リアクターのランタイムが単一のwhile True
イベントを繰り返すループ。リアクタは、待機中のタスクをチェックして処理し、その結果をキュー (コールバックまたはエラーバックのいずれか) に送り返します。次のループ実行では、それらはさらに 1 ステップ処理されます。したがって、遅延実行は実際には線形です (ただし、外部からは並列に実行されたように見えます)。私の解釈は正しいですか?
誰かが私の質問に答えたり、twist/python プラットフォームで非同期性がどのように機能するか、またオペレーティング システムとどのように関連しているかを説明していただければ幸いです。事前に良い説明をありがとう!
編集: 非同期性を説明する記事へのリンクは大歓迎です!