是否可以在多个线程之间共享OpenSSL::PKey::RSA对象示例(即通过将其分配给常量),或者每个Ruby线程都应该使用OpenSSL::PKey::RSA对象的单独示例?
OpenSSL::PKey::RSA
4nkexdtk1#
一般来说,是的。所有Ruby代码的默认行为(即使是像OpenSSL这样的 Package C库)都是一次只运行一个Ruby线程。因此,默认情况下,两个线程不可能以危险的方式同时访问同一个对象。然而,对于C扩展,有一些方法可以禁用这种保护,这样你就可以在线程之间实现真正的并行性,但理想情况下,这应该只用于gem作者知道是线程安全的某些关键部分。基本上,你不需要担心跨线程共享对象会导致Ruby崩溃。但特别是对于Ruby中实现的对象,它们的方法有可能在不同的线程中并发运行,这可能会导致令人惊讶的结果。如果你想要这种线程安全保证,无论你使用的是什么类型的对象,都可以使用Mutex。
1条答案
按热度按时间4nkexdtk1#
一般来说,是的。所有Ruby代码的默认行为(即使是像OpenSSL这样的 Package C库)都是一次只运行一个Ruby线程。因此,默认情况下,两个线程不可能以危险的方式同时访问同一个对象。
然而,对于C扩展,有一些方法可以禁用这种保护,这样你就可以在线程之间实现真正的并行性,但理想情况下,这应该只用于gem作者知道是线程安全的某些关键部分。
基本上,你不需要担心跨线程共享对象会导致Ruby崩溃。但特别是对于Ruby中实现的对象,它们的方法有可能在不同的线程中并发运行,这可能会导致令人惊讶的结果。如果你想要这种线程安全保证,无论你使用的是什么类型的对象,都可以使用Mutex。