Jython 中有哪些常见的隐藏因素可能会阻碍多线程/并行性?我有一些并行代码(使用 Python 的线程库)不会超过 3-4 个 CPU,而且我确信这不是因为这些明显的缺陷:
显式锁
调用需要同步的库代码(我尝试并行化的算法基本上是从头开始编写的,不使用任何库。)
基本上,算法所做的只是一堆字符串处理、列表和字典查找以及数学运算。我的理解是,与 CPython 不同,Jython 没有 GIL。
最佳答案
访问变量是那些“隐藏的”瓶颈之一。如果所有线程都访问一些共享数据结构,线程之间就会同步。
Jython 努力实现与 CPython 的语言兼容性。 GIL 确保的一件事是对局部/全局变量、对象成员、字典元素(技术上局部变量、全局变量和对象成员也是字典元素)甚至列表元素的访问是原子的。为了避免让用户感到意外,Jython 使用并发 HashMap 来实现字典。这意味着在 Jython 中访问任何类型的 dict 元素时都会进行一些同步。这种同步是 strip 化的,以支持从多个线程访问 dict 而不会阻塞它们,但是如果多个线程访问同一个变量,它们将命中同一个锁。
在 Jython 和任何其他语言中实现可伸缩性的最佳方法是确保您在每个线程中访问的数据也不会从其他线程访问。
关于java - Jython 中隐藏的多线程瓶颈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4227269/