Skip to content

lishiming/shm_round_robin_queue

Repository files navigation

/*
      进程间有多种通信方式,常见的包括 socket,共享内存,命名管道等等,最常见的是socket和共享内存,socket应该是用的最多的,
  很简单,顺手抄起来就能用,并且移植性很强,如果改为分布式不在同一主机,只需要把配置ip和port修改即可,调试也很方便,
  用tcpdump和netstat基本就够调试了,但是从效率上比共享内存要逊色不少,尤其是同一份数据需要发给多个进程时,做了大量重复性
  劳动。
      
      共享内存以高效著称,不仅使数据在用户进程和内核传递的次数减少了(共享内存2次,其他IPC4次),在多个进程接收数据时更是
  可以大显神威,但是封装这样一个功能模块复杂度要比socket高很多。
      
      这里将共享内存进行了封装,以循环队列的形式供进程进行读写(支持一个进程写,多个进程读,如果是需要多个进程写需要再
  实例化一个对象即可),对数据同步进行了精心设计,尽最大努力减少锁冲突,在数据同步的前提下提高读写效率。
  
      将源码贴出来,希望得到交流,研一时写的代码,代码风格和函数抽象层次确实让现在得我不敢苟同,将当时的代码贴出来我
      付出了极大地勇气来面对过去的自己。
      
      目前review了下自己的代码,有几个不满意的地方,1 代码风格当时还不稳定 2 接口设计的不是很合理,我会加上类似于tcp的三次
      握手类似的接口。 3 阻塞做的不好,起码加个计时器。 4 加上调试的开关,如果用户需要调试,可以打开开关写日志核对读写信息。
      
      
      参考书籍为stevens大神的unp1,unp2。

			四年后重新看自己学生时代的代码 感觉写的好啰嗦,找时间重构下好了
			现在工作天天跟共享内存打交道,项目组的一个前辈封装的一套接口十分简洁
*/

About

shared memory

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages