学习让我快乐

争于世, 不争于势;简洁, 高效, 赏心悦目

PhxPaxos Group 多状态机另外一种实现思路

目前 PhxPaxos 中的 Group 支持挂载多个状态机. 并且除了用户显式挂载的状态机之外, PhxPaxos 也会根据配置往 Group 上挂载一些内部状态机, 比如负责 master 选举的 MasterStateMachine 等. 但目前由于 MasterStateMachine, SystemVSM 等内部状态机各自都会构建自己的 checkpoint 以及从 checkp...

Storm ShellBolt 死锁

Storm ShellBolt 存在死锁的风险. 在 storm 中, ShellBolt 与其子进程通过标准输入/标准输出, 即文件描述符 0, 1 来通信, 同时也会读取标准出错, 即文件描述符 2 中的内容, 并将读取到的内容通过 storm 的日志系统输出到日志中. 具体如下: public void writeBoltMsg(BoltMsg msg) throws IOExcep...

Storm UI 统计不准确

发现 Storm ui 上的统计不是很准确. 经过一番 beidu 之后, 在 setStatsSampleRate 这里找到原因. 按我理解, storm 上 topology 每一次 emit/ack/fail tuple, 或者其他任何动作时都会调用 storm 的一些 hook. config.setStatsSampleRate() 指定了调用频率, 默认是 0.05, 即 to...

Storm.py json decode exception

事故现场如图: 本来因为是 ShellBolt 出现 BUG 了. 感觉像 writeBoltMsg() 时遇到了 InterruptedException 导致只写入了 "comp: nu", 然后又一次调用 writeBoltMsg() 导致错乱了. 后来发现不对. 因为这个异常只出现在我们的一个组件 C 内. C 使用了多进程, 并且 C 的子进程中调用了 storm.em...

mysql SQL 优化案例 JOIN 顺序调整

线上 mysql slow log 显示有一条 sql 其执行时间几率性 2s+. sql 如下: SELECT tableA.col10 FROM tableB INNER JOIN tableA ON tableB.col6 >= :c1 AND tableB.col6 <= :c2 AND tableB.col9 < :col9 AND tableB.id = ta...

Golang C++11 中的原子操作对比

在学习 C++11 中新增的原子操作以及相应的 memory model 之后; 再看 golang 中的 sync/atomic, 可以发现 sync/atomic 提供的是纯粹的原子操作, 等同于 c++11 中的 std::memory_order_relaxed. 所以 The Go Memory Model 在介绍 golang memory model 并未提及到 atomic ...

The Go Memory Model

Introduction 略 Advice 当数据被多个 goroutines 同时 accesse(存取) 时, 这些 access must serialize. To serialize access, protect the data with synchronization primitives(同步原语), such as channel operations, thos...

The Go Programming Language Specification

参考: 1.6.3 Source code representation 源码文件使用 UTF-8 文件存放. Lexical elements Comments 与 C++ 一致. Tokens Token 分为四类:identifiers, keywords, operators and delimiters, and literals White...

Gcc 使用 init priority 控制全局变量初始化顺序

init_priority 在 C++ 标准中,对于全局变量的初始化顺序,只规定了若全局变量的定义在同一 translation unit (可以理解为:源文件) 中,则定义的顺序决定了初始化的顺序,并没有规定跨 translation unint 的情况下初始化顺序. gcc 中可以通过__attribute__((__init_priority__(PRIORITY)))在全局变量定...

C++-引用限定符

引用限定符 引用限定符;可以在参数列表之后使用引用限定符来指定this对象的左值与右值属性; 若引用限定符为&,则表明this对象指向着左值对象; 若引用限定符为&&,则表明this对象指向着右值对象. struct X { void foo() &; void foo() &...

C++ 模板

Traits, SFINAE, CRTP

type_traits 利用了模板特化的特性;具体可以参见奇异递归模板模式 SFINAE SFINAE;Substitution failure is not an error,替代失败不是一个错误;即编译器在实例化模 板时若无法推导出模板实参的值,或者无法确定函数的原型;则认为替代失败,此时并不会视为一个编译错误, 而是将无法推导的模板函数从候选函数集中移除,...

MESI protocol

关于 MESI MESI 是一种使用广泛的协议,用来实现 cache coherence 和 memory coherence. MESI 细节 MESI 仅是一种协议!并没有与具体的硬件关联. MESI 中的缓存模型 cache,cache line;cache 与 cache line 是 2 回事;其中 cache line 是固定大小(一...

Cpu Cache 简单介绍

嗯,…,真的是很简单的介绍咯 @_@ CPU Cache 为何引入 一张比较直观的时间图: execute typical instruction; 1 ns; L1 cache reference,从 L1 cache 中取数据; 0.5 ns L2 cache reference,从 L2 cache 中取数据; 7 n...