没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
在网络服务等需要提供不间断服务的程序中,程序的运行时升级通常都是一项常规任务,例如: 1)运行时修改一些参数配置; 2)运行时修改一个算法模块(动态库); 为了在执行这些任务时,程序不停(仍使用旧配置或旧模块运行),常见的解决方案包括: 1)增加冗余的配置项或模块句柄的存储空间(所有这些数据打包成一个结构体),程序运行时使用其中的一份;当需要更新时,在更新的过程中将新的配置(或模块句柄)内容存储至备用内存;加载完成后将运行时配置(或模块句柄)指针指向新的内存地址。由于修改配置(或模块句柄)的频率远小于这些内容的读取频率,因此一个线程执行更新操作即可。另外,即使外加有多个线程同时读取,由于只涉及到配置项(或模块句柄)的整体结构体的这一个指针修改,读线程读到的值无非是“旧指针”和“新指针”二者之一(如果内存读写模型不支持这一点,或者在这种情况下可能有第三种,甚至第四种情况出现,本方案将不可用),因此程序仍能正常执行,并最终使用更新后的内容运行。 2)程序通过一个主进程协调,具体任务由工作进程完成。外界通知这个主进程使用新的配置(或模块),主进程便创建新的工作进程,这些新启动的进程自然会使用新的配置(或模块);当新创建的进程一切就绪之后,主进程便会通知其他进程结束,并在之后将新的任务委派给新创建的进程。Nginx的设计便是这种方案的一个典型。 这里设计的一个C++模板是上述解决方案1)的一种实现。
资源推荐
资源详情
资源评论
收起资源包目录
LatestDataManager.zip (8个子文件)
LatestDataManager
LatestDataManager.vcproj 4KB
stdafx.h 233B
ReadMe.txt 1KB
utility.h 2KB
stdafx.cpp 222B
LatestDataManager.cpp 1KB
LatestDataManager.sln 899B
targetver.h 498B
共 8 条
- 1
资源评论
catxl313
- 粉丝: 41
- 资源: 15
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功