共享内存

python学习日志

牧云@^-^@ 提交于 2019-12-10 04:18:18
python中if __name__ == '__main__': 的解析 当你打开一个.py文件时,经常会在代码的最下面看到if __name__ == '__main__':,现在就来介 绍一下它的作用. 模块是对象,并且所有的模块都有一个内置属性 __name__。一个模块的 __name__ 的值取决于您如何应用模块。如果 import 一个模块,那么模块__name__ 的值通常为模块文件名,不带路径或者文件扩展名。但是您也可以像一个标准的程序样直接运行模块,在这 种情况下, __name__ 的值将是一个特别缺省"__main__"。 /////////////////////////////////////////////////////////////////////////////////////////////////// 在cmd 中直接运行.py文件,则__name__的值是'__main__'; 而在import 一个.py文件后,__name__的值就不是'__main__'了; 从而用if __name__ == '__main__'来判断是否是在直接运行该.py文件 Python 获得命令行参数的方法 需要模块:sys 参数个数:len(sys.argv) 脚本名: sys.argv[0] 参数1: sys.argv[1] 参数2: sys.argv

golang 进程间共享内存

自作多情 提交于 2019-12-10 01:36:58
最近想认真学习一下golang, 最好的学习方法当然是做一个项目咯.。这个项目服务端用GO编写,前端打算用VUE来搞。项目的功能呢,大致就是go能定期通过爬虫获取一些网络数据, 然后通过http接口vue展示数据。 一开始,想要解决的问题是,想通过共享内存的方式进行各子进程间的通信,因为这种方式最快。因为之前C++有用过 CreateFileMapping和 OpenFileMapping,所以也研究了一下GO有没有相关的库。发现有个syscall库有一些系统调用相关函数,syscall库的相关介绍如下: Go 语言库对Syscall的封装 我们知道Go是一门面向系统级开发的Native编程语言,与C/C++ 类似,Go的编译器会直接将程序编译、链接成本地可执行文件。理论上,它可以完成任何C/C++语言能完成的。作为支撑该特性的重要方面,Go以标准库形式提供了syscall包,用来支持OS级系统调用。 首先,Go对各种系统调用接口进行了封装,提供给用户一组Go语言函数,方便在程序中直接调用,如: func Read(fd int, p []byte) (n int, err error) func Write(fd int, p []byte) (n int, err error) 同时,Go还通过以下函数提供了对Syscall的直接调用支持: func Syscall(trap,

OPERATING SYSTEM_process2_Interprocess Communication

本秂侑毒 提交于 2019-12-10 00:36:47
OPERATING SYSTEM process2 interprocess communication进程间通信 0.概述一下 0.1 Processes within a system may be independent or cooperating操作系统内并发执行的进程可以是独立进程或协作进程。Cooperating process can affect or be affected by other processes, including sharing data与其他进程共享数据的进程是协作进程 说白了,进程间通信就是进程之间的信息交换 0.2 Reasons for cooperating processes四个理由 Information sharing信息共享(允许对共享信息进行并发访问) Computation speedup 提高运算速度(把任务分成子任务并行执行) Modularity模块化(可将系统功能分成独立进程或线程) Convenience方便(单个用户也能同时执行许多任务) 0.3 IPC基本模式 (1)shared memory共享内存 (2)message passing消息传递 共享内存比消息传递快 1.Shared Memory共享内存 1.1 Producer-Consumer Problem 生产者进程产生信息以供消费者进程消费

总结oracle18.3c-centos7-安装

流过昼夜 提交于 2019-12-09 23:16:33
官网下载对应名字rpm包 oracle-database-ee-18c-1.0-1.x86_64.rpm 下载依赖包 除非已有依赖 否则会报缺少依赖错误 1 curl -o oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm 关闭防火墙 关闭selinux(disabled) root 用户下 先 yum localinstall -y oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm 将会自动下载依赖包 cd /opt rpm -ivh oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm 等待自动安装 结束后/opt 下自动生成 oracle目录 并且 系统自动创建oracle user 和oinstall group passwd oracle 更改oracle用户密码 登陆oracle用户 配置当前用户的环境变量 bash_profile 必须要配的如下 配完后 source

进程间、线程间通信方式

偶尔善良 提交于 2019-12-09 20:14:19
一、进程间的通信方式 (1)管道( pipe ) :管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。 (2)有名管道 (namedpipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。 (3) 信号量(semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。 (4) 消息队列( messagequeue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。 (5) 信号 (sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。 (6) 共享内存(shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。 (7) 套接字(socket ) : 套解口也是一种进程间通信机制

python 基于mmap模块的jsonmmap实现本地多进程内存共享

喜夏-厌秋 提交于 2019-12-09 16:24:48
python 基于mmap模块的jsonmmap实现本地多进程内存共享 ###1.概述 共享内存可以说是最有用的进程间通信方式.两个不用的进程共享内存的意思是:同一块物理内存被映射到两个进程的各自的进程地址空间.一个进程可以及时看到另一个进程对共享内存的更新,反之亦然.采用共享内存通信的一个显而易见的好处效率高,因为进程可以直接读写内存,而不需要任何数据的复制.对于向管道和消息队列等通信等方式,则需要在内核和用户空间进行四次的数据复制,而共享内存则只需要两次数据复制:一次从输入文件到共享内存区,另一个从共享内存区到输出文件.实际上,进程之间在共享内存时,并不总是读写少量数据后就解除映射,有新的通信时,再重新建立共享内存区域.而是保持共享区域,知道通信完毕为止,这样,数据内容就一直保存在共享内存中,并没有写回文件.共享内存中的内容往往是在解除映射时才写回文件的.因此,采用共享内存的通信方式效率非常高. mmap系统调用是的是的进程间通过映射同一个普通文件实现共享内存.普通文件被映射到进程地址空间后,进程可以向像访问普通内存一样对文件进行访问,不必再调用read,write等操作.与mmap系统调用配合使用的系统调用还有munmap,msync等. 实际上,mmap系统调用并不是完全为了用于共享内存而设计的.它本身提供了不同于一般对普通文件的访问方式

php加速器eaccelerator的配置

假如想象 提交于 2019-12-06 21:29:10
[Zend] zend_extension_ts=”X:\App\php-5.2.13-Win32\ext\eaccelerator.dll” eaccelerator.shm_size=”32″ eaccelerator.cache_dir=”X:\App\php-5.2.13-Win32\temp” eaccelerator.enable=”1″ eaccelerator.optimizer=”1″ eaccelerator.check_mtime=”1″ eaccelerator.debug=”0″ eaccelerator.filter=”" eaccelerator.shm_max=”0″ eaccelerator.shm_ttl=”0″ eaccelerator.shm_prune_period=”0″ eaccelerator.shm_only=”0″ eaccelerator.compress=”1″ eaccelerator.compress_level=”9″ zend_extension_manager.optimizer_ts=”X:\App\Zend\ZendOptimizer-3.3.0\lib\Optimizer-3.3.0″ zend_extension_ts=”X:\App\Zend\ZendOptimizer-3.3.0\lib

PHP安装eAccelerator

冷暖自知 提交于 2019-12-06 21:28:56
eAccelerator是一个非常优秀的PHP加速器,通过缓存编译之后的PHP代码文件,使得PHP编译对服务器的开销几乎为零。eAccelerator本身的开销也是极少的 最新的PHP5.4.8安装eAccelerator, 需要注意的是要安装高版本的,低了编译不过去。 官网: http://eaccelerator.net/ 注意PHP5.5以后暂时不能使用eAccelerator 原因:其中一个我知道的是eAccelerator中使用了 php_register_info_logo(EACCELERATOR_VERSION_GUID, "text/plain", (unsigned char*)EACCELERATOR_VERSION_STRING, sizeof(EACCELERATOR_VERSION_STRING)); php_register_info_logo(EACCELERATOR_LOGO_GUID, "image/gif", (unsigned char*)eaccelerator_logo, sizeof(eaccelerator_logo)); php_register_info_logo在PHP5.5中已经移除了 。 1.下载安装eAccelerator # wget https://github.com/eaccelerator

多进程共享内存

瘦欲@ 提交于 2019-12-06 21:24:25
问题描述 一个大小为3的缓冲区,初始为空 2个生产者随机等待一段时间,往缓冲区添加数据,若缓冲区已满,等待消费者取走数据后再添加,重复6次 3个消费者随机等待一段时间,从缓冲区读取数据,若缓冲区为空,等待生产者添加数据后再读取,重复4次 说明: 显示每次添加和读取数据的时间及缓冲区里的数据 生产者和消费者用进程模拟 思路 这道题目涉及到的知识点有: 进程控制管理,包括进程的创建与销毁等 进程通信技术,如管道、共享内存等 解决思路主要是: 一个主进程负责创建和销毁子进程,负责创建共享内存区和公用信号量 五个子进程,两个是生产者,三个是消费者,通过信号量对共享内存进行互斥读写 创建互斥访问量 创建信号量如下: 信号量:EMPTY, FILLED, RW 初始化:EMPTY=3,FILLED=0,RW=1 说明: EMPTY 信号量指示缓冲区有多少个空位置没有被占用,因此初始值等于缓冲区数量; FILLED 指示缓冲区有多少个位置被占用,因此初始值等于0; RW 指示是否允许对共享内存进行读写操作,为防止进程并发执行导致的数据共享错误,每次仅允许一个进程对共享内存进行操作,因此初始值为1. 生产者消费者执行操作 生产者 P(EMPTY);//首先询问是否有空闲缓冲区,没有则阻塞,等待消费者拿出数据释放一个缓冲区;有则EMPTY-=1 P(RW);//是否可以对共享内存进行读写操作

消息通讯(IPC)

冷暖自知 提交于 2019-12-06 11:02:05
在PHP中使用共享内存段 在不同的处理进程之间使用共享内存是一个实现不同进程之间相互通讯的好方法。如果你在一个进程中向所共享的内存写入一段信息,那么所有其他的进程也可以看 到这段被写入的数据。非常方便。 在PHP中有了共享内存的帮助,你可以实现不同进程在运行同一段PHP脚本时返回不同的结果。或实现对PHP同时运行数量 的实时查询等等。共享内存允许两个或者多个进程共享一给定的存储区。因为数据不需要在*户机和*务器之间复制,所以这是最快的一种IPC。使用共享内存的唯一窍门是多个进程对一给定存储区的同步存取。 如何建立一个共享内存段呢?下面的代码可以帮你建立共享内存。$shm_id = shmop_open($key, $mode, $perm, $size);注意,每个共享内存段都有一个唯一的ID, 在PHP中,shmop_open会把建立好的共享内存段的ID返回,这里我们用$shm_id记录它。而$key是一个我们逻辑上表示共享内存段的 Key值。不同进程只要选择同一个Key id就可以共享同一段存储段。习惯上我们用一个串(类似文件名一样的东西)的散列值作为key id. $mode指明了共享内存段的使用方式。 这里由于是新建,因此值为’c’ –取create之意。如果你是访问已经建立过的共享内存那么请用’a’,-- 取access之意。$perm参数定义了访问的权限,8进制