内容简介: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 源码分析——内存模块之共享内存
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
数据结构与算法JavaScript描述
[美] Michael McMillan / 王群锋、杜 欢 / 人民邮电出版社 / 2014-8 / 49.00元
通过本书的学习,读者将能自如地选择最合适的数据结构与算法,并在JavaScript开发中懂得权衡使用。此外,本书也概述了与数据结构与算法相关的JavaScript特性。 本书主要内容如下。 数组和列表:最常用的数据结构。 栈和队列:与列表类似但更复杂的数据结构。 链表:如何通过它们克服数组的不足。 字典:将数据以键-值对的形式存储。 散列:适用于快速查找和检索。......一起来看看 《数据结构与算法JavaScript描述》 这本书的介绍吧!