内容简介:Python 在 2019-02-25 释出了 3.8 早期预览版在 POSIX 平台下共享内存创建过程如下:
Thu 28 February 2019
Python 在 2019-02-25 释出了 3.8 早期预览版 3.8.0a2 ,其中新增了 multiprocessing.SharedMemory 用以支持共享内存,大大提高多进程之间通信效率。简单看了一下实现代码主要涉及如下 Python 模块
- Python 3.3 新增的内置类型 memoryview
- Python 3.2 新增的 mmap
在 POSIX 平台下共享内存创建过程如下:
-
基于
tmpfs
打开或创建具名(文件名)的共享内存,得到文件描述符 -
通过
mmap
将文件描述符映射进程的内存地址空间 -
通过
memoryview
直接访问经过mmap
映射后的的内存地址空间
锁的问题
memoryview
通过如下方式使用:
s = bytearray(b'aaa') m = memoryview(s) m[0] = 98 print(s) # outputs: bytearray(b'baa')
当上面代码执行 m[0] = 98
时实际上调用的是 C 代码 memory_ass_sub
,然后调用 PACK_SINGLE
通过 memcpy
覆盖指针原有的值。
所以直接操作 multiprocessing.SharedMemory
会产生数据竞争,不应该直接使用,应该使用 multiprocessing.Value
和 multiprocessing.Array
这种更高层的抽象,锁在这一层级实现。
参见
更多关于共享内存参见:
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Chrome 63 Beta:支持动态模块导入,新增设备内存 API
- 1.内存优化(一)内存泄漏
- 内存泄露与内存溢出的区别
- 谈谈对物理内存和虚拟内存的理解以及内存分配原理,一文彻底搞懂
- [译] 图解 Go 内存管理与内存清理
- Swoole 源码分析——内存模块之共享内存
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
XML 在线格式化
在线 XML 格式化压缩工具
UNIX 时间戳转换
UNIX 时间戳转换