第二十三天:共享内存.消息队列及mysql数据库使用

共享内存和消息队列也是进程间的通信方式。

共享内存,(和信号量的操作类似)

#include<sys/shm.h>

1、int shmget(key_t key,size_t size,int shmflg);

作用:新建一块内存或者返回已建好的内存

参数:key,用于表示开辟一段内存,各进程通过这个标志访问同一块内存

size,内存的大小

shmflg,和文件操作完全相同权限表示,按位或IPC_CREATE表示创建一块内存,如果key表示的内存已经建立,即使加了IPC_CREATE也不会新建一块内存,会返回key关联的内存。

返回值:返回一个标示符,其他对共享内存的操作,用到该返回值

2、void *shmat(int shm_id,const void * shm_addr,int shmflg);

作用:讲一段共享内存连接到当前进程

参数:shm_id,shmget的返回值

shm_addr连接到当前进程的地址位置,一般为NULL,表示让系统来选择

shmfig:SHM_RND,与shm_addr联合使用,控制连接地址

SHM_RDONLY,只读

一般设为0

返回值:指向共享内存第一字节的指针

3、int shmdt(const void * shm_addr);

作用:将共享内存从当前进程分离出去

参数:shmat的返回值

4、int shmctl(int shm_id,int command,struct shmid_ds * buf);

structshmid_ds {

uid_t shm_perm.uid;

uid_t shm_perm.gid;

mode_t shm_prem.mode;

}

作用:对共享内存的控制

参数:shm_id,shm_get的返回值

commond,IPC_STAT:把shmid_ds中的值设为当前共享内存状态值

IPC_SET:把共享内存状态设为shmid_ds中的值

IPC_RMID:删除共享内存段

消息队列

#include<sys/msg.h>

1、int msgget(key_t key,int msgflg);

作用:创建和访问一个消息队列

参数:key,键值表示一个消息队列

msgflg,权限标志位,与shmget标志位类似

返回值:返回一个描述符,用于其他消息队列函数中

2、int msgsnd(int msqid,const void * msg_ptr,size_t msg_sz,int msgflg);

一般把消息用下边结构体表示

struct my_message{

long int message_type;//表示数据类型

/*The data you wish to transfer*/

}

作用:把消息添加到消息队列

参数:msqid,msgget的返回值

msg_ptr,指向准备发送消息的指针

msg_sz,消息长度不包括长整形消息类型变量

msgflg控制当前队列满或达到系统最大限度时发生的事情,一般设为0

3、int msgrcv(int msqid,void * msg_ptr,size_t msg_sz,long intmsgtype,int msgflg);

作用:从消息队列中接收消息

参数:msqid,msgget函数的返回值

msg_ptr,指向准备接收消息的指针

msg_sz,接受消息的大小,不包括表示类型的第一个变量

msgtype,接受类型

msgflg,控制没有消息接收时发生的事情,一般设为0

5、int msgctl(int msqid,int commond,struct msqid_ds * buf);

structmsqid_ds {

uid_t msg_perm.uid;

uid_t msg_perm.gid;

mode_t msg_perm.mode;

}

http://blog.csdn.net/coderlrx/article/details/8762017

时间: 2024-08-05 05:24:11

第二十三天:共享内存.消息队列及mysql数据库使用的相关文章

进程间通信第二课--信号量 共享内存 消息队列

信号量 程序中存在一部分临界代码,要确保只有一个进程(或一个执行线程)可以进入临界区代码,并拥有对资源的独占式访问权 我们需要一种方法,通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域 这里讲的信号量比在线程的调用中使用的互斥量和信号量更加通用 P:等待,好像位于进入临界区域之前的检查点 V:给予或者释放,好像放弃对临界区域的控制权 P(sv):要是sv的值大于零,就减去1,如果它的值等于零,就挂起该进程的执行 V(sv):要是其他进程因等待sv而被挂起,就让它恢复运行,

JMS消息持久化,将ActiveMQ消息持久化到mySql数据库中

ActiveMQ5.8.0版本采用kahadb作为默认的消息持久化方式.使用默认的持久化机制,我们不容易直接看到消息究竟是如何持久的.ActiveMQ提供的JDBC持久化机制,能够将持久化信息存储到数据库.通过查看数据库中ActiveMQ生成的表结构和存储的数据,能够帮助我们更好的了解消息的持久化机制.现在介绍如何配置activemq,将数据持久化到mysql中. 1.配置activeMQ需要的mySql数据源 为了能够使用JDBC访问mysql数据库,显然必须要配置消息服务器的数据库源.在ac

云计算openstack共享组件-消息队列rabbitmq(2)

一.MQ 全称为 Message Queue, 消息队列( MQ ) 是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们.   消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术.排队指的是应用程序通过队列来通信.队列的使用除去了接收和发送应用程序同时执行的要求.   排队指的是应用程序通过 队列来通信.队列的使用除去了接收和发送应用程序同时执行的要求.

JMS学习八(ActiveMQ的消息持久化到Mysql数据库)

1.将连接Mysql数据库的jar文件,放到ActiveMQ的lib目录下 2.修改ActiveMQ的conf目录下的active.xml文件,修改数据持久化的方式 2.1  修改原来的kshadb的持久化数据的方式 <persistenceAdapter> <!-- <kahaDB directory="${activemq.data}/kahadb"/> --> <jdbcPersistenceAdapter dataSource=&quo

node 内存消息队列

var net = require('net') var clients = [] ,msgs = {} function unWrapMsg(data){ data = data.toString().trim() var _d = data.split(':' , 2) _d[1] = _d[1] || '' var p1 = _d[0].trim() ,p2 = _d[1].trim() ,p3 = data.slice(_d[0].length + _d[1].length + 2) r

Python进阶【第二篇】多线程、消息队列queue

1.Python多线程.多进程 目的提高并发 1.一个应用程序,可以有多进程和多线程 2.默认:单进程,单线程 3.单进程,多线程 IO操作,不占用CPU python的多线程:IO操作,多线程提供并发 计算性操作 多进程提高并发 4.GIL,全局解释器锁 总结: 多进程,多线程,提供并发 IO密集型:多线程 计算密集型:多进程 2.threading模块 threading模块对象 描述 Thread 表示一个线程的执行的对象 Lock 锁原语对象 RLock 可重入锁对象.使单线程可以再次获

ActiveMQ 消息持久化到Mysql数据库

[[email protected] local]# tar -zxvf apache-activemq-5.15.8-bin.tar.gz[[email protected] local]# mv apache-activemq-5.15.8 activemq[[email protected] activemq]# cd conf/[[email protected] conf]# pwd/usr/local/activemq/conf[[email protected] conf]# cp

(总结)高并发消息队列常用通知机制

最近在研究一个高性能的无锁共享内存消息队列,使用的fifo来通知.结合之前<基于管道通知的百万并发长连接server模型>文章,这里总结一下常用的通知机制. 常用的通知机制中比较典型的有以下几种: 1.signal 这种机制下,我们向被通知进程发送一个特殊的signal(比如SIGUSR1),这样正在睡眠的读进程就会被信号中断,然后醒来. 该方法的优点是:读进程不需要监听一个额外的eventfd,适合一些不方便使用eventfd的场景:另外,用户可以选择是使用实时信号(SIGRTMIN+1),

项目分布式部署那些事(1):ONS消息队列、基于Redis的Session共享,开源共享

因业务发展需要现在的系统不足以支撑现在的用户量,于是我们在一周之前着手项目的性能优化与分布式部署的相关动作. 概况 现在的系统是基于RabbitHub(一套开源的开发时框架)和Rabbit.WeiXin(开源的微信开发SDK)开发的一款微信应用类系统,主要业务是围绕当下流行的微信元素,如:微官网.微商城.微分销.营销活动.会员卡等. 关于RabbitHub详情请戳: .NET 平台下的插件化开发内核(Rabbit Kernel) RabbitHub开源情况及计划 关于Rabbit.WeiXin详