5

私は何時間も読んでいて、Pythonマルチスレッドがシングルスレッドよりもどれほど速いかを完全に理解することができます。

質問は本当にGILから生じています。GILがあり、一度に1つのスレッドだけが実際に実行されている場合、マルチスレッドはシングルスレッドよりもどのように高速になりますか?

いくつかの操作でGILがリリースされることを読みました(ファイルへの書き込みなど)。それがマルチスレッドを高速化する理由ですか?

そして、グリーンレットについて。それらは並行性にどのように役立ちますか?これまでのところ、私が彼らに見ているすべての目的は、関数とそれほど複雑でないyield関数を簡単に切り替えることです。

編集:そして、世界でトルネードのようなサーバーは何千もの同時接続をどのように処理できますか?

4

1 に答える 1

8

正解です。PythonがCコードの実行を待機しているときに、GILが解放されます。これにより、速度を上げることができます。ただし、一度に実行できるPythonの行は1行だけです。これはCPython(実装)の詳細であり、厳密に言えばPython自体の一部ではないことに注意してください。たとえば、JythonとIronPythonにはGILがなく、マルチプロセッサシステムを完全に活用できます

CPythonで真に並行プログラミングが必要な場合は、スレッド化ではなく マルチプロセッシングを検討する必要があります。

于 2013-02-08T03:20:39.140 に答える