Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。外すのかを意識することが重要になります。いうのも、それがないと、マルチスレッド環境で実装したとしても、処理が平行して実行されないからです。外れると理解しています。的に大丈夫なのだろうか、と疑問に思いました。Lock)と呼ばれる事が多いようです。票3Cレベルではrb_thread_call_without_gvlまたはrb_thread_call_without_gvl2(違いはinterruptのありなし)を呼び出すことでGVLを外したスレッドで実行されることになります。逆に言うとこの二つの関数を呼び出しているところでは一時的にGVLが外れた処理がされていると言うことです。2.6系のソースを軽く見た程度ですが、次のような所で上の関数が呼ばれていました。zlibで使用されています。IO周りはopen時にGVLを外している場合があるようです。read/writeの処理がどうなのかはそこまで詳しくないのでよくわかりませんでした。全てを確認したわけではありません。これ以外にも内部で上のメソッド呼び出している場合があります。メソッドの全ての処理についてGVLが外れるのではなく、処理の一部でGVLが外れることになります。環境や処理内容によっては外れないままの場合もあります。Kenrel.#sleepはスレッド処理の一部として組み込まれているようです。GVLが外れた場合の恩恵を受けるのはマルチコアな環境です。シングルコアな環境ではGVLが外れても処理全体の速度が向上するわけではありません。通常の処理のほとんどでGVLを外すことは(CRubyの実装上)不可能なので、IO処理や余程重いライブラリ処理のみでGVLを外しているようです。マルチコアをフルに使いたいというのであれば、マルチフォークにしたほうが良いでしょう。マルチスレッドのままマルチコアをフルに使いたいというのであれば、JRubyを検討した方が良いでしょう。外れている様子であるという結論を得ました。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。