当前位置: 代码迷 >> python >> Jython中隐藏的多线程瓶颈?
  详细解决方案

Jython中隐藏的多线程瓶颈?

热度:81   发布时间:2023-06-16 14:02:10.0

在Jython中可以阻塞多线程/并行性的一些常见隐藏事物是什么? 我有一些并行代码(使用Python的线程库),它不能扩展到超过3-4个CPU,我确信这不是因为任何这些明显的陷阱:

  • 显式锁

  • 调用需要同步的库代码(我尝试并行化的算法基本上是从头开始编写的,不使用任何库。)

基本上所有的算法都是一堆字符串处理,列表和字典查找和数学。 我的理解是,与CPython不同,Jython没有GIL。

访问变量是那些“隐藏”的瓶颈之一。 如果所有线程都访问某些共享数据结构,则线程之间将存在同步。

Jython努力实现与CPython的语言兼容性。 GIL确保的一件事是访问本地/全局变量,对象成员,dict元素(技术上本地,全局和对象成员也是dict元素)甚至列表元素都是原子的。 为了避免用户出现意外,Jython使用并发哈希映射来实现dicts。 这意味着在访问Jython中的任何类型的dict元素时会发生一些同步。 这种sycnhronization是条带化的,以支持从多个线程访问dict而不会阻塞它们,但如果多个线程访问同一个变量,它们将会遇到同一个锁。

在Jython和任何其他语言中实现可伸缩性的最佳方法是确保您在每个线程中访问的数据也不会从其他线程访问。

Jython没有GIL,但很难获得很多并行性。 如果你有任何不能同时完成的部分,你会受到的 :

在并行计算中使用多个处理器的程序的加速受到程序的连续分数所需的时间的限制。

而且,即使你进行纯粹的并行计算,你也会被其他东西所困扰,比如使你的缓存变得紧张。 还要记住,您的代码是在虚拟机上运行的,因此即使您的代码纯粹是并行的,JVM也可能会有一些内部协调来阻止您(垃圾收集是一个明显的候选者)。

您是否尝试过任何包? 即使他们没有明确表示Jython,我敢打赌它会提供一些帮助。

如果您有权访问许可证,我会首先尝试 。