Ruby Net :: HTTP线程安全吗?

时间:2010-06-17 15:26:57

标签: ruby multithreading

Ruby的Net :: HTTP线程安全吗?

(除了明确说明的版本_1_1和版本_1_2方法之外)

1 个答案:

答案 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周围添加锁或使用线程安全替代方案来保证安全。