再看设计模式——单例模式

这个模式其实就是要保证只有一个实例存在。通常的实现思路就是持有一个私有静态实例,保证仅一次初始化,以getInstance方法返回。但是实际实现这个模式要考虑更多细节:  线程安全与DLC 单例对象的析构与销毁 组件中单例对象的管理 单例模式的单元测试 使用C++实现还必须额外注意一些实现细节 静态成员变量初始化顺序不依赖构造函数, 多个单例可能初始化顺序不对 延迟初始化(第一次使用才初始化)需要 …

阅读全文

volatile与内存屏障总结

一. 内存屏障 Memory Barrior 1.1 重排序 同步的目的是保证不同执行流对共享数据并发操作的一致性。在单核时代,使用原子变量就很容易达成这一目的。甚至因为CPU的一些访存特性,对某些内存对齐数据的读或写也具有原子的特性。但在多核架构下即使操作是原子的,仍然会因为其他原因导致同步失效。 首先是现代编译器的代码优化和编译器指令重排可能会影响到代码的执行顺序。 其次还有指令执行级别的乱序 …

阅读全文

每月技术提升2018年8~10月

每月技术追踪 [移动前端]Angular 7发布,新版本带来了虚拟滚动、拖放、CLI Prompts等特性。 [编程语言]微软正式发布TypeScript 3.0,这是TypeScript之旅的一个新的里程碑。3.0虽然是个大版本,但并没有包含太多重大的变更(也就是说升级很容易)。新版本引入了一种新的灵活且可扩展的方式来构建项目、对操作参数列表提供了更强大的支持、新的强制显式检查类型、更好的JSX …

阅读全文

Zookeeper系统设计的缺陷

之前总结过Zookeeper的各种设计优点,但是这个系统的缺陷与优点同样突出,本文就是结合自己的使用经验,业界给出的评价对ZK的缺点进行的归纳,一方面归纳使用表现上的不足,另一方面根据个人经验总结出系统本身功能设计时的就存在的缺陷。同时也思考了相应对策与改进的办法,算是本人对ZK设计的完整的思考总结吧。最后还关注了下etcd这个后起之秀的设计,看看它是否已经弥补了ZK的不足,能否担当后继者。 1. …

阅读全文