Pythonの並列処理を行う際には、GIL(Global Interpreter Lock)という仕組みを理解することが重要です。GILはPythonやRubyなどの言語に見られる排他ロックの仕組みで、一つのスレッドのみがバイトコードを動作可能である必要があります。
PythonのGILは、バージョン3.2によって変更され、gil_drop_request
というロック開放リクエストが起点となりました。デフォルトでは、GILは5ミリ秒(5000マイクロ秒)後に解放され、他のスレッドがGILを取得する機会を得ることができます。このデフォルト値は、sys.setswitchinterval
を使用して変更することができます。
GILの存在は、Pythonという言語自身の特性ではなく、C言語で実装されたCPythonに付随するものです。例えば、Javaで実装されたJythonは、JVMによるスレッド管理のおかげでマルチスレッド下でも競合が発生しないため、GILが存在しません。
しかし、GILを回避できるメリットよりも、C言語の資産を活用できることやアップデートが活発であるといったメリットが大きいと判断されているためか、CPythonが多く利用されているのでしょう。
以上の情報を踏まえて、PythonのGILとスレッド切り替えのインターバルについて理解を深めることができました。これらの知識は、Pythonでの並列処理を行う際に非常に重要です。