QA@IT
«回答へ戻る

回答を投稿

単純にGVLを外すと、Cで書かれたRubyの言語処理系の大部分をスレッドセーフにしなければならず、また将来にわたってもスレッドセーフなコードを書き続けなければいけないし、これは大変そうなのでやれていないのかなぁと理解しています。

どうてしてもGVLを外して並列で実行したい!ということであれば、C拡張ライブラリでrb_thread_call_without_gvl()を使うという手もあると思います。
実際、拡張ライブラリのzlibでは特定の処理をGVLを外して実行しています。

単純にGVLを外すと、Cで書かれたRubyの言語処理系の大部分をスレッドセーフにしなければならず、また将来にわたってもスレッドセーフなコードを書き続けなければいけないし、これは大変そうなのでやれていないのかなぁと理解しています。

どうてしてもGVLを外して並列で実行したい!ということであれば、C拡張ライブラリで``rb_thread_call_without_gvl()``を使うという手もあると思います。
実際、拡張ライブラリのzlibでは特定の処理をGVLを外して実行しています。