- 论坛徽章:
- 9
|
本帖最后由 wlmqgzm 于 2015-10-30 12:46 编辑
回复 98# windoze
1. Lock free的各种实现都必须用到memory barrier,否则你根本做不出来
答复: 这个很简单, 因为没有调用那么低层次的代码, 直接使用Boost库, 库里面应该考虑了这些, 就是直接使用Boost::lock-free::queue, 就三行代码.construct, push, pop
2. SSE指令不是原子操作,不能保证数的完整性和一致性
答复: SSE指令就是一个校验的作用, 在前面给其他人的回复中, 有具体的说明.
3. 在这种场合下checksum不能就地检测数据错误,除非你把整块数据copy出来自己再算一遍
答复: 读, 是Memcpy, 先一次性读到本地栈的struct中, 然后再处理. 写, 是先在本地栈操作完毕后, 一次性写到hash表中, Memcpy.
对于方案一, 做内存数据库, 存在大量单线程的情况, 就是分摊了数据, 这个没有什么好办法, 就是用单线程解决问题. 但是数据切分多块以后, 提高了总体对外的表现.
对于方案二, 就是只做类似memcache的东西, 可以实现单线程写, 多线程读, 提供比目前memcache性能更好的替代方案. 写是只能单线程, 没有什么好办法.读性能会高一些.
基本上2套方案, 对应的是两套不同的产品, 整体的技术架构, 各实现的主要技术难点, 基本上应该在讨论中都有具体的解决方案,
我觉得cache的总体设计框架基本就这样定型了, 只是实现细节还有不少, 难度上讲, cache的实现要简单一些.
内存数据库无论大小都是非常多的人力资源堆出来的东西, 除非走捷径, 我的思路是要拿MYSQL挡一下, 减少代码量, 具体思路, 以后再讨论.
|
|