查了很多资料,这些资料基本直说到GIL会让是字节码只让一个线程执行,但是为什么要这么做的原因,都感觉没说的很彻底。所以想请高人解惑!!
认证0级讲师
Python の父の会話の一部にはいくつかのトリックが見られます。
一部のリスナーは、グローバル インタープリター ロック (GIL) について質問し、この問題とその解決方法について詳しく知りたいと考えていました。ヴァン・ロッサムは微笑みながら「どれくらい時間がありますか?」と尋ね、彼はGILの歴史を簡単に話した。 Python の誕生後、マルチコア コンピューターが登場しました。スレッドが異なるコアで実行されている場合、2 つ以上のプロセッサが同じオブジェクトを更新しようとすると、特に Python ガベージ コレクション メカニズムで競合メカニズムが発生します。
合理的な解決策は、各オブジェクトをロックすることです。これにより、複数のアクセスによるデータの損傷を防ぐことができます。しかし、その結果、ロックの競合がない場合には、ロックおよびロック解除の操作にコストがかかります。いくつかの実験では、ロックを必要としないシングルスレッド プログラムのパフォーマンスが 2 分の 1 に低下することが示されています。これは、3 つ以上のスレッドまたはコアを使用するプログラムのみがこの恩恵を受けることを意味します。
このようにして、GIL が誕生しました (ただし、名前はインタプリタに追加されてからずっと後まで表示されませんでした)。これは、すべてのオブジェクトを一度に効果的にロックする単一のロックであるため、すべてのオブジェクトへのアクセスが順序付けされます。現在の問題は、10 年か 15 年後にはマルチコア プロセッサがあらゆる場所に普及し、人々はマルチプロセッシングを行わずにマルチコア プロセッサを利用したいと思うようになる (例: スレッド通信の代わりに独立したプロセスを使用する)
彼は、今新しい言語を設計したいなら、変更可能なオブジェクトを持たないようにするか、変更可能性を制限するようにしてください、と言いました。しかし、聴衆からは「これはもう Python ではない」という声が上がりました。 「私が言おうとしていたことをあなたは言いました」とヴァン・ロッサムも同意した。 GIL に関しては、PyPy ソフトウェア トランザクション メモリ (STM) や PyParallel など、開発者による多くの継続的な取り組みが行われています。他の開発者も解決策を見つけようと頭を悩ませています。 GIL を削除して Pythonic 言語を維持する方法を知っている人がいたら、Van らはぜひそれについて聞きたいと思っています。
ロックの粒度が小さいほど実装が複雑になり、ロックによってパフォーマンスが低下する可能性があるため、グローバルな大きなロックが追加されます。
Python の父の会話の一部にはいくつかのトリックが見られます。
一部のリスナーは、グローバル インタープリター ロック (GIL) について質問し、この問題とその解決方法について詳しく知りたいと考えていました。ヴァン・ロッサムは微笑みながら「どれくらい時間がありますか?」と尋ね、彼はGILの歴史を簡単に話した。 Python の誕生後、マルチコア コンピューターが登場しました。スレッドが異なるコアで実行されている場合、2 つ以上のプロセッサが同じオブジェクトを更新しようとすると、特に Python ガベージ コレクション メカニズムで競合メカニズムが発生します。
合理的な解決策は、各オブジェクトをロックすることです。これにより、複数のアクセスによるデータの損傷を防ぐことができます。しかし、その結果、ロックの競合がない場合には、ロックおよびロック解除の操作にコストがかかります。いくつかの実験では、ロックを必要としないシングルスレッド プログラムのパフォーマンスが 2 分の 1 に低下することが示されています。これは、3 つ以上のスレッドまたはコアを使用するプログラムのみがこの恩恵を受けることを意味します。
このようにして、GIL が誕生しました (ただし、名前はインタプリタに追加されてからずっと後まで表示されませんでした)。これは、すべてのオブジェクトを一度に効果的にロックする単一のロックであるため、すべてのオブジェクトへのアクセスが順序付けされます。現在の問題は、10 年か 15 年後にはマルチコア プロセッサがあらゆる場所に普及し、人々はマルチプロセッシングを行わずにマルチコア プロセッサを利用したいと思うようになる (例: スレッド通信の代わりに独立したプロセスを使用する)
彼は、今新しい言語を設計したいなら、変更可能なオブジェクトを持たないようにするか、変更可能性を制限するようにしてください、と言いました。しかし、聴衆からは「これはもう Python ではない」という声が上がりました。 「私が言おうとしていたことをあなたは言いました」とヴァン・ロッサムも同意した。 GIL に関しては、PyPy ソフトウェア トランザクション メモリ (STM) や PyParallel など、開発者による多くの継続的な取り組みが行われています。他の開発者も解決策を見つけようと頭を悩ませています。 GIL を削除して Pythonic 言語を維持する方法を知っている人がいたら、Van らはぜひそれについて聞きたいと思っています。
ロックの粒度が小さいほど実装が複雑になり、ロックによってパフォーマンスが低下する可能性があるため、グローバルな大きなロックが追加されます。