问题标签 [gil]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
8176 浏览

python - concurrent.futures 是 GIL 的药物吗?

我只是在搜索这个新实现,我使用 python 2.7,我必须安装,所以如果我使用它,我会忘记 CPython 上的 GIL 这个词吗?

0 投票
1 回答
160 浏览

python - PyPy 可以在一个进程中使用多个 CPU 吗?

CPython中有一个GIL,听说PyPy没有这个问题。这是真的?

0 投票
1 回答
486 浏览

python - f2py 函数发布 GIL

当我调用 f2py 包装函数时,全局解释器锁 (GIL) 是否会被释放?

(我很高兴自己尝试发现,但我对 numpy 的来源不够熟悉,不知道从哪里开始寻找)......

澄清一下,对这个问题的一个好的回答要么帮助我知道在 numpy 源中寻找 a 的位置,Py_BEGIN_ALLOW_THREADS 要么它只会让我知道 GIL 是否已发布(最好有一些证据)。

0 投票
1 回答
109 浏览

python - 冻结的 Python 二进制文件会访问本地解释器和全局解释器锁(GIL)吗?

我正在开发一台 Linux 多核机器,在该机器上我只需在命令行上使用解释器(实际上只是“python script.py”)同时多次调用相同的 Python 脚本。我发现即使我在机器资源范围内,性能也比单个调用慢得多。我相信这是因为实例通过全局解释器锁 (GIL) 共享解释器 - 即,无论如何,几个实例最终都运行“单核”。如果我对脚本的冻结 Python 二进制版本 ( http://wiki.python.org/moin/Freeze ) 做同样的事情,那也会发生吗?我不相信,因为二进制“带有自己的解释器”?

0 投票
1 回答
373 浏览

python - Python GIL、C 扩展和增加吞吐量 (Python 3.2)

我有一个接受请求的服务器应用程序,需要运行一些 Python,其中一些调用我的基于 C 的扩展 DLL。如果我在整个请求期间完全锁定 GIL,一切正常。但是我想在基于 C 的扩展 DLL 中释放它,当长时间操作发生时,可以处理更多请求。到目前为止,这是我的方法:

以上所有步骤都是单线程(系统中有很多类似的线程)。

上面的调用序列总是在 Python 深处的步骤 (H) 中某处抛出异常(我似乎无法从堆栈跟踪中找出)。但是,如果我在 (B) 处对 PyGILState_Ensure 进行额外调用,以便 (E) 和 (F) 处的调用最终不会做任何事情,那么一切都会完美运行。

有人可以帮我理解我做错了什么吗?我真的很想在长时间的操作中释放 GIL,以便其他请求可以取得进展。

0 投票
1 回答
421 浏览

python - PyPy 与 Cpython,是否会放弃 GIL 并支持 POSIX 线程?

鉴于 GIL 限制了 python 支持真正线程的能力,是否有可能将其从当前的 python 实现中剥离,以便该语言最终可以支持真正的多线程。此外,假设 GIL 被删除,这是否意味着多核线程最终会出现在 Python 和 Ruby 等脚本/解释语言中?

0 投票
2 回答
1214 浏览

python - 为什么 GIL 替代方案会对性能产生影响?

来自 Java 的 Ruby 和 Python 中的整个全局解释器锁 (GIL) 有点令人吃惊。我已经阅读了一些问题,并在Python 文档中找到了以下摘录:

我们不能摆脱全局解释器锁吗?

全局解释器锁 (GIL) 通常被视为 Python 在高端多处理器服务器机器上部署的障碍,因为多线程 Python 程序有效地只使用一个 CPU,因为坚持(几乎)所有 Python 代码只能在持有 GIL 时运行。

早在 Python 1.5 时代,Greg Stein 实际上实现了一个全面的补丁集(“自由线程”补丁),它移除了 GIL 并用细粒度锁定取而代之。不幸的是,即使在 Windows(锁非常有效)上,它运行普通 Python 代码的速度大约是使用 GIL 的解释器的两倍。在 Linux 上,性能损失更严重,因为 pthread 锁效率不高。

我没有找到性能影响背后的解释。我试图找出技术原因是什么,但找不到任何好的讨论来确定它。

在 Ruby 中类似,在这里我可以找到更少的信息。原因是一样的吗?

0 投票
1 回答
58 浏览

python - 是否有通用方法来测试 GIL 的存在?

我正在编写一个多线程 Python 应用程序,它在系统上的行为会有所不同,具体取决于 GIL 实现的细节。

我是否有一种通用的方法来测试我正在运行的解释器是否具有 CPython 风格的 GIL?

0 投票
1 回答
61 浏览

python - 哪些 Python VM 和版本包含 GIL,哪些不包含?

在这里看到 CPython 2.*, 3.[01] 和 PyPy 1.4.1 都有一个 GIL。CPython 3.2 具有改进的 GIL。等等......它相当全面,但并不详尽,而且似乎有点过时了。该页面是此信息的最佳资源,还是某处有更新的页面?

0 投票
1 回答
3769 浏览

c++ - 为什么渲染引擎将图像细分为小方块?

想象一下,我在内存中有一个由 anarray或 an表示的图像std::vector;为了这个例子,我还假设我的图像是 400x300 像素,我想将此结构细分为最大 64x64 像素的正方形(或平铺)。

我正在考虑的数组是这样声明的

喜欢_

这是 1 个很好的连续内存块。

我的观点是你总是尽量保持数据结构和对该数据结构的访问尽可能线性。将图像细分为正方形涉及从 1 行跳转到另一行或从 1 列跳转到另一行,具体取决于图像在内存中的布局方式。在给定图像的大小和尺寸的情况下,我在计算正方形的边界时没有问题,但是在表达对这个正方形的迭代时,事情变得有点太复杂了,我没有看到这种方法有什么真正的好处。

那么为什么这种细分步骤的解决方案如此受欢迎呢?为什么不一次渲染 1 行或 1 列?