内容简介: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 源码分析——内存模块之共享内存
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
高质量程序设计艺术
斯皮内利斯 / 韩东海 / 人民邮电出版社 / 2008-1 / 55.00元
在本书中,作者回归技术层面。从Apache web server、BSD版本的Unix system、ArgoUMl、ACE网络编程库等著名开源软件中选取了大量真实C、C++和java语言源代码,直观而深刻的阐述了代码中可能存在的各种质量问题,涉及可靠性、安全性、时间性和空间性、可移植性、可维护性以及浮点运算等方面,很多内容都市独辟蹊径,发前人所未发。正因如此,本书继作者的《代码阅读》之后在获Jo......一起来看看 《高质量程序设计艺术》 这本书的介绍吧!