Ruby的Net :: HTTP线程安全吗?
(除了明确说明的版本_1_1和版本_1_2方法之外)
答案 0 :(得分:3)
我不会指望它。
2008年,matz wrote:
对于MRI(1.8.x)和YARV(1.9.x),每个C实现的方法都是 受GIL(Global Interpreter Lock)保护,因此您不必这样做 担心。但它可能取决于每个实现。
Net :: HTTP在stdlib中,这意味着它不是用C实现的(至少在C中没有完全实现)。我假设今天关于GIL的matz注释仍然正确,这意味着GIL不会放在Net :: HTTP上。因此,我怀疑它是线程安全的。
遗憾的是,我没有在当前版本的Ruby的文档中找到明确的证据,尽管我觉得值得一提Concurrency in jruby的这一点:
至少这些类[stdlib中的核心类和类]是 不被认为是线程安全的,如果你打算改变它们 与其他操作同时,您将要引入锁定 (例如,使用Mutex):String,Array,Hash和任何数据结构 源自他们。
我觉得最好通过在Net :: HTTP周围添加锁或使用线程安全替代方案来保证安全。