哪些 ruby 方法免费 GVL?

Which ruby methods free GVL?

在多线程 ruby 执行中,除非使用释放 GVL 的函数,否则无法并行执行线程。

据我了解,遵循 ruby 方法可以释放 GVL:

问题

版本

In pure ruby, is there any other methods which frees GVL?

在纯粹的Ruby中,没有 GVL 这样的东西。 GVL 是 Ruby 的一个特定实现的某些特定版本的功能。 绝大多数 的 Ruby 实现没有 GVL,甚至没有类似的东西。

I'm currently using ruby version 2.6, so expect the info of this version.

Ruby 的所有版本都是如此。 Ruby 的任何版本都没有指定 GVL 的存在。 Ruby 的任何未来版本都非常值得怀疑。

我在 Whosebug(日语)上问了同样的问题。

得到这个答案 https://ja.whosebug.com/a/55579/754 ,其中说明

  • Bignum's div / modulo
  • Dir.new/Dir.open
  • Dir.chdir
  • Dir.rmdir
  • Dir.empty?
  • Dir.glob
  • File.chown
  • File's methods which check file status, namely stats
  • File.rename
  • File.truncate
  • File.mkfifo
  • IO.copy_stream
  • IO.#open and IO.#close related codes (was too complex to understand)
  • Kernel.#system
  • Kernel.#exec

and in other standard libraries such as fiddle, openssl, readline, socket, zlib actually calls method which frees GVL.

这个很棒的答案是 https://whosebug.com/users/4944814/raccy

写的