Python 线程内存布局(结合 boost::python)

Posted

技术标签:

【中文标题】Python 线程内存布局(结合 boost::python)【英文标题】:Python thread memory layout (in combination with boost::python) 【发布时间】:2015-06-10 09:51:32 【问题描述】:

我有一个用 C++ 编写的 boost::python 应用程序。这段代码被编译成一个二进制文件,其中还包括 Python 解释器。然后使用导入 C++ 模块的 Python 脚本调用二进制文件:

./c++executable script.py

现在我想使用 Python 线程并行化代码:在 Python 代码中,我想创建线程,然后(除其他外)调用用 C++ 编写的函数。

但是,我无法找到有关 python 线程使用的内存布局的信息:

是每个线程都有自己定义的内存段来使用,还是不同的线程会尝试在同一个内存段中分配内存?

如果每个线程都有自己的(深拷贝)C++ 对象,线程之间会不会有任何干扰?

这在 Linux 操作系统上运行。 应用程序使用-lpthread 标志编译,如果这有区别的话。

如果有人能对这些问题有所了解,我将不胜感激。

【问题讨论】:

Python 线程的内存模型将类似于宿主线程库的内存模型。使用 CPython 实现,请注意不会获得 Python 代码的并行执行。 【参考方案1】:

每个线程都有自己定义的内存段来使用,还是不同的线程会尝试在同一个内存段中分配内存?

线程的全部意义在于共享所有内存。

如果每个线程都有自己的(深拷贝)C++ 对象,线程之间会不会有任何干扰?

这是你作为程序员的责任——确保没有。在线程将处理相同数据的情况下,尤其是在一个线程可能访问某些内容而另一个线程正在修改它的情况下,您必须使用适当的同步。

一条建议:如果您不熟悉 C++ 和 Python 中的线程,请先学习其中的每一个,然后再尝试同时使用这两种语言和线程。

【讨论】:

以上是关于Python 线程内存布局(结合 boost::python)的主要内容,如果未能解决你的问题,请参考以下文章

JVM运行时数据区的概述,线程概述

Java并发编程——进程和线程Java对象内存布局synchronizedwait和notify

JVM内存布局

面试 -- Java内存布局图以及java各种存储区详解

JVM内存布局

原理解析!你连基础的JVM运行时内存布局都忘了