-
Notifications
You must be signed in to change notification settings - Fork 18
lishiming/shm_round_robin_queue
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
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 0
No packages published