哪些 ruby 方法免费 GVL?
Which ruby methods free GVL?
在多线程 ruby 执行中,除非使用释放 GVL 的函数,否则无法并行执行线程。
据我了解,遵循 ruby 方法可以释放 GVL:
Kernel#sleep
IO#read
和 IO#write
问题
- 在纯粹的ruby中,有没有其他释放GVL的方法?
版本
- 我目前正在使用 ruby 2.6 版,所以期待这个版本的信息。
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.
写的
在多线程 ruby 执行中,除非使用释放 GVL 的函数,否则无法并行执行线程。
据我了解,遵循 ruby 方法可以释放 GVL:
Kernel#sleep
IO#read
和IO#write
问题
- 在纯粹的ruby中,有没有其他释放GVL的方法?
版本
- 我目前正在使用 ruby 2.6 版,所以期待这个版本的信息。
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.