首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >无锁编程(七) - 实战

无锁编程(七) - 实战

作者头像
三丰SanFeng
发布2018-01-16 16:03:52
发布2018-01-16 16:03:52
1.2K0
举报
文章被收录于专栏:三丰SanFeng三丰SanFeng

数据与进程对等的处理

场景:某服务需要支持海量用户,在一台物理机器上运行了多个进程/线程。对于数据应该如何处理以保证安全快速的访问数据呢?

解决方案:“分”

分号段

分进程

分端口

分库分表

单一生产者与单一消费者

场景:

网络接入进程与逻辑处理进程通过共享内存通讯。我们要如何进行设计?

通常的实现:读写加锁

示例:无锁内存队列的实现

代码语言:js
复制
append_data(srcbuf, buflen)
int usedSize = (m_head->size + m_head->endPos – m_head->beginPos) % m_head->size;
int leftSize = m_head->size – usedSize;
if (leftSize < buflen) return -1;
_copy_to_queue();
Int newpos = ….;
m_head->endPos = newpos;
take_data(dstbuf, buflen)
if (m_head->beginPos == m_head->endPos) return -1;
_copy_from_queue();
_do_copy_data();
int newpos = ….;
m_head->beginPos = newpos;

进程运行中重新加载配置(双缓存)

场景:

1、 进程需要可以动态加载配置,我们需要怎么做?

2、 进一步,如果配置非常复杂,各个配置具有一定的依赖性,配置检查错误的话加载配置将会失败。我们如何设计才能安全、动态、无锁的加载配置?

通常的实现:

重启进程

发送信号

创建管理端口

示例1:直接访问共享内存

示例2:双配置缓冲区的实现

代码:

代码语言:js
复制
cfg_t* get_cur_cfg
return cfg_list + cur_idx;
load_cfg
int another = 1 – cur_idx;
_load_cfg(cfg_list + another);
cur_idx = another;

版权声明:本文为博主原创文章,未经博主允许不得转载。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-09-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据与进程对等的处理
  • 单一生产者与单一消费者
  • 进程运行中重新加载配置(双缓存)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档