写跨平台C语言代码的十个规则

写跨平台C语言代码的十个规则

翻译了一篇关于写跨平台C语言代码的文章,介绍了10个相关规则。Rule #1: 同时开发 – 不要先开发后移植。不要把迁移工作外包。Rule #3: 使用标准C类型,不要使用特定于平台的类型。Rule #4: 只使用内置的 #ifdef 编译标志,不要自己发明轮子。 Rule #5: 开发一个简单的可重用的跨平台的基础库,来隐藏每个平台的代码。Rule 6#: 在所有的API中都使用Unicode(特别是UTF-8)。Rule #7: 不要使用第三方应用程序框架或者运行时环境来是你的代码跨平台。Rule #8: 原生代码本来就总是可以所有平台上编译->不是某个脚本让它们从不能编译变得能够编译了。 Rule #9:所有的程序都能在所有的平台编译。Rule #10:开除那些懒惰、不称职、态度差、不遵循这些规则的程序员。

《挑战程序设计竞赛》读书笔记(四)格点问题的证明

《挑战程序设计竞赛》读书笔记(四)格点问题的证明

《挑战程序设计竞赛》2.6节第一道题中讲解了求线段上格点个数的问题,该解答给出了结果,但中间过程省略了不少内容。本文补充了相关的证明和解释。
问题描述如下:
格点是指平面坐标系中,横纵坐标都是整数的点。给定平面上两个格点,P1(x1,y1),P2(x2,y2),则线段P1P2上除了P1和P2外,有几个格点?事实上,该问题答案为|x2-x1|和|y2-y1|的最大公约数减1,并给出了一个图示。本文对该结论给出了证明。

漫谈复制状态机的几个有趣的问题

漫谈复制状态机的几个有趣的问题
读过Paxos等论文的读者,应该对复制状态机(Replicated State Machine)的概念并不陌生。复制状态机在分布式系统中是一个很简单却很强大的模型,也是一种很有价值的思想。 模型一句话描述就是:多个节点上,从相同的初始状态开始,执行相同的一串命令,产生相同的最终状态。 这里有几个有趣的问题。   复制状态机保持一致是什么意思? 实际上,与其说是一致,其实可以泛化为分布式的两个节点状态存在某种...

EPaxos协议解读

EPaxos协议解读

本篇博文主要描述了EPaxos command commit的过程,并且解释了为什么fast quorum的值如此奇怪。
相比Multi Paxos和Raft,EPaxos有着自己的优势,但是缺点也非常明显,EPaxos协议非常复杂,接口行为也不见得适应现在的软件栈,比如commit和execution的阶段划分更加的明确,execution逻辑很复杂,读取操作也很复杂。我个人认为EPaxos协议的一些想法还是比较有意思的,但是不太适合生产场合使用,毕竟能实现一个高效正确的Multi Paxos协议已属不易,而且EPaxos协议虽然吞吐量能有比较大的提高,但是容易发现协议中各种操作真正在实现时,会出现大量非常耗费CPU的代码,整体性能能提高到多少,我想并不太乐观。

Google Spanner论文解读

Google Spanner论文解读

Google Spanner是google在2012年公开的存储系统,它的最大特点就是数据分布在全球范围内,支持外部一致性的分布式事务。本文依据论文解读了该系统的设计和实现。

FLP impossibility证明 阅读笔记

FLP impossibility证明 阅读笔记

分布式系统一致性协议里面有一个FLP impossibility的结论,这个结论是说,在分布式系统中,异步网络(消息延迟可能任意大或丢失,消息可能乱序),只要有一个进程失效(进程死亡或者足够长时间不响应),就不可能设计出一个一致性协议。
该结论由Fisher、Lynch、Paterson三位分布式系统领域的科学家在1985年在论文Impossibility of Distributed Consensus with One Faulty Process证明。本文解读了证明过程。

分布式系统下的时间 时钟 事件序 论文解读

分布式系统下的时间 时钟 事件序 论文解读

分布式系统的happen-before关系是个偏序关系,并且我们扩展为一个全序关系并用于分布式资源协调问题的求解。但是即使在全序关系下,会有异常情况发生,这里通过同步时钟来避免异常现象。本文解读了Lamport的经典论文,Time, Clocks, and the Ordering of Events in a Distributed System。