热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

大数据进程间通信的共享内存是怎样的

本篇文章给大家分享的是有关大数据进程间通信的共享内存是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获

本篇文章给大家分享的是有关大数据进程间通信的共享内存是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

共享内存:

 用于进程之间的数据传递,是system v版本中最高效的,但是它不会同步与互斥,所以常与信号量搭配使用。

nattch:表示有多少个进程挂接在共享内存上。要查看其值用 ipcs -m 命令

大数据进程间通信的共享内存是怎样的

删除key值用 ipcrm -m +key值;

图形理解共享内存:

大数据进程间通信的共享内存是怎样的

#include

#include

1.创建共享内存函数:

int shget(key_t key,size_t size, int shmflg* buf);

    第二个参数是其大小,一般为4k 即4096的整数倍;

     第三个参数一般为:IPC_CREAT|IPC_EXCL;

2.销毁共享内存的函数:

int shmctl(int shm _id,int cmd,int shmflg* buf);

 第二个参数一般为:IPC_RMID;

3.挂接在共享内存上:

void *shmat(int shmid, const void *shmaddr, int shmflg);

4.去关联共享内存

int shmdt(const void *shmaddr);

共享内存实现代码:

//comm.h

  1 #include
  2 #include
  3 #include
  4 #include
  5 #include
  6 #define  _PATH_ "."
  7 #define  _PROJ_ID_ 0X7777
  8 #define  _SIZE_  4096
  9 int shm_create()
 10 {
 11    key_t key=ftok(_PATH_, _PROJ_ID_);
 12     if(key<0)
 13       {
 14          perror("ftok");
 15          return -1;
 16       }
 17     int shm_id=shmget(key,_SIZE_,IPC_CREAT|IPC_EXCL|0666);
 18      if(shm_id<0)
 19      {
 20       perror("shmget");
 21       return -1;
 22       }
 23     return shm_id;
 24 }
 25 
 26 int shm_get()
 27 {
 28 
 29 
 30    key_t key=ftok(_PATH_, _PROJ_ID_);
 31     if(key<0)
 32       {
 33          perror("ftok");
 34          return -1;
 35       }
 36     int shm_id=shmget(key,_SIZE_,IPC_CREAT);//得到的是已创建好的
 37      if(shm_id<0)
 38      {
 39       perror("shmget");
 40       return -1;
 41       }
 42     return shm_id;
 43 
 44 }
 
 //server.c
 
  1 #include"comm.h"
  2 
  3 int main()
  4 {
  5   int shm_id=shm_create();
  6   sleep(10);
  7  char *start=at_shm(shm_id);
  8  int i;
  9  for(i=0;i<20;++i)
 10   {
 11 
 12     printf("%s\n",start);
 13     sleep(1);
 14 
 15    }
 16  dt_shm(start);
 17  shm_destroy(shm_id);
 18  return 0;
 19 }

//client.c

  1 #include"comm.h"
  2 
  3 int main()
  4 {
  5   int shm_id=shm_get();
  6   sleep(5);
  7   char *start=at_shm(shm_id);
  8   int i;
  9   for(i=0;i<20;++i)
 10   {
 11    start[i]=&#39;A&#39;;
 12    start[i+1]=&#39;\0&#39;;
 13    }
 14  sleep(7);
 15  dt_shm(start);
 16  sleep(12);
 17  return 0;
 18 
 19 
 20 
 21 
 22 }

 //Makefile
   1 .PHONY:all
  2 all:server client
  3 server:server.c
  4         gcc -o $@ $^
  5 client:client.c
  6         gcc -o $@ $^
  7 .PHONY:clean
  8 clean:
  9         rm -f server client

大数据进程间通信的共享内存是怎样的

结果分析:
当server.c 运行起来时显示器上没有东西,当client.c运行起来打印东西时,这时的server也可以读到内容将其显示在显示器上。这样实现了不同进程之间的通信,通过共享内存。

以上就是大数据进程间通信的共享内存是怎样的,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程笔记行业资讯频道。


推荐阅读
  • 在进行网络编程时,准确获取本地主机的IP地址是一项基本但重要的任务。Winsock作为20世纪90年代初由Microsoft与多家公司共同制定的Windows平台网络编程接口,为开发者提供了一套高效且易用的工具。通过Winsock,开发者可以轻松实现网络通信功能,并准确获取本地主机的IP地址,从而确保应用程序在网络环境中的稳定运行。此外,了解Winsock的工作原理及其API函数的使用方法,有助于提高开发效率和代码质量。 ... [详细]
  • 使用cpphttplib构建HTTP服务器以处理带有查询参数的URL请求 ... [详细]
  • 本文作为“实现简易版Spring系列”的第五篇,继前文深入探讨了Spring框架的核心技术之一——控制反转(IoC)之后,将重点转向另一个关键技术——面向切面编程(AOP)。对于使用Spring框架进行开发的开发者来说,AOP是一个不可或缺的概念。了解AOP的背景及其基本原理,对于掌握这一技术至关重要。本文将通过具体示例,详细解析AOP的实现机制,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本文将详细介绍在Android应用中添加自定义返回按钮的方法,帮助开发者更好地理解和实现这一功能。通过具体的代码示例和步骤说明,本文旨在为初学者提供清晰的指导,确保他们在开发过程中能够顺利集成返回按钮,提升用户体验。 ... [详细]
  • 结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法
    结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法 ... [详细]
  • 在稀疏直接法视觉里程计中,通过优化特征点并采用基于光度误差最小化的灰度图像线性插值技术,提高了定位精度。该方法通过对空间点的非齐次和齐次表示进行处理,利用RGB-D传感器获取的3D坐标信息,在两帧图像之间实现精确匹配,有效减少了光度误差,提升了系统的鲁棒性和稳定性。 ... [详细]
  • 本文详细介绍了如何在Linux系统中搭建51单片机的开发与编程环境,重点讲解了使用Makefile进行项目管理的方法。首先,文章指导读者安装SDCC(Small Device C Compiler),这是一个专为小型设备设计的C语言编译器,适合用于51单片机的开发。随后,通过具体的实例演示了如何配置Makefile文件,以实现代码的自动化编译与链接过程,从而提高开发效率。此外,还提供了常见问题的解决方案及优化建议,帮助开发者快速上手并解决实际开发中可能遇到的技术难题。 ... [详细]
  • 本文详细解析了 MySQL 5.7.20 版本中二进制日志(binlog)崩溃恢复机制的工作流程。假设使用 InnoDB 存储引擎,并且启用了 `sync_binlog=1` 配置,文章深入探讨了在系统崩溃后如何通过 binlog 进行数据恢复,确保数据的一致性和完整性。 ... [详细]
  • Java 零基础入门:SQL Server 学习笔记(第21篇)
    Java 零基础入门:SQL Server 学习笔记(第21篇) ... [详细]
  • 在Linux系统中,`inet_pton` 和 `inet_ntop` 是两个重要的IP地址转换函数,它们能够实现IP地址在“点分十进制”和“整数”格式之间的相互转换。特别是 `inet_pton`,它不仅支持IPv4,还支持IPv6地址的转换,广泛应用于网络编程中,确保了不同格式IP地址的高效处理和兼容性。本文将详细探讨这两个函数的内部实现机制及其在网络编程中的具体应用。 ... [详细]
  • 开发笔记:STL 容器 deque 的元素访问与迭代器详解
    开发笔记:STL 容器 deque 的元素访问与迭代器详解 ... [详细]
  • 在 HihoCoder 1505 中,题目要求从给定的 n 个数中选取两对数,使这两对数的和相等。如果直接对所有可能的组合进行遍历,时间复杂度将达到 O(n^4),因此需要考虑优化选择过程。通过使用哈希表或其他高效的数据结构,可以显著降低时间复杂度,从而提高算法的效率。具体实现中,可以通过预处理和存储中间结果来减少重复计算,进一步提升性能。 ... [详细]
  • BZOJ4240 Gym 102082G:贪心算法与树状数组的综合应用
    BZOJ4240 Gym 102082G 题目 "有趣的家庭菜园" 结合了贪心算法和树状数组的应用,旨在解决在有限时间和内存限制下高效处理复杂数据结构的问题。通过巧妙地运用贪心策略和树状数组,该题目能够在 10 秒的时间限制和 256MB 的内存限制内,有效处理大量输入数据,实现高性能的解决方案。提交次数为 756 次,成功解决次数为 349 次,体现了该题目的挑战性和实际应用价值。 ... [详细]
  • 深入解析Gradle中的Project核心组件
    在Gradle构建系统中,`Project` 是一个核心组件,扮演着至关重要的角色。通过使用 `./gradlew projects` 命令,可以清晰地列出当前项目结构中包含的所有子项目,这有助于开发者更好地理解和管理复杂的多模块项目。此外,`Project` 对象还提供了丰富的配置选项和生命周期管理功能,使得构建过程更加灵活高效。 ... [详细]
  • 题目描述:小K不幸被LL邪教洗脑,洗脑程度之深使他决定彻底脱离这个邪教。在最终离开前,他计划再进行一次亚瑟王游戏。作为最后一战,他希望这次游戏能够尽善尽美。众所周知,亚瑟王游戏的结果很大程度上取决于运气,但通过合理的策略和算法优化,可以提高获胜的概率。本文将详细解析洛谷P3239 [HNOI2015] 亚瑟王问题,并提供具体的算法实现方法,帮助读者更好地理解和应用相关技术。 ... [详细]
author-avatar
我喜欢吕继宏
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有