ruby でマルチスレッドプログラミングを行う場合、どの ruby のメソッドが GVL を外すのかを意識することが重要になります。というのも、それがないと、マルチスレッド環境で実装したとしても、処理が平行して実行されないからです。

自分の理解としては、以下の ruby のメソッドたちは、 GVL が外れると理解しています。

  • Kernel#sleep
  • IO#read, IO#write

ふと、マルチスレッド環境で system 系のコマンド実行を実装しようとして、これは GVL 的に大丈夫なのだろうか、と疑問に思いました。

質問

  • ruby のメソッドの中で、 GVL が外れるものはどれですか?
    • 例えば、(ないとは思いますが)ありとあらゆるシステムコールに対して GVL が外れたりしますか?