代码之家  ›  专栏  ›  技术社区  ›  Steven Soroka

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

  •  11
  • Steven Soroka  · 技术社区  · 14 年前

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

    (除了版本1和版本1方法外,它明确表示不是)

    1 回复  |  直到 10 年前
        1
  •  3
  •   Nick McCurdy    10 年前

    我不会指望的。

    2008, matz wrote :

    对于mri(1.8.x)和yarv(1.9.x),每个C实现的方法都是 受gil(全局解释器锁)保护,因此您不必 担心。但这可能取决于每个实现。

    NET::HTTP在stdlib中,这意味着它没有在C中实现(或者至少没有在C中完全实现)。我假设Matz在gil上的注释今天仍然正确,这意味着gil不会放在net::http上。因此,我怀疑这会是线程安全。

    不幸的是,我在文档中没有找到当前版本的Ruby的确凿证据,尽管我觉得值得一提的是 Concurrency in jruby :

    至少这些类[stdlib中的核心类和类]是 不被认为是线程安全的,如果您打算改变它们 与其他操作同时,您将希望引入锁定 (例如,使用互斥体):字符串、数组、哈希和任何数据结构 源自它们。

    我觉得最好是在net::http周围添加锁,或者使用threadsafe替代方法来保证安全。