学习让我快乐

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

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...

Address Sanitizer 使用

Address Sanitizer 是什么 Address Sanitizer;是一种检测内存读取是否合法的一种机制.其会在应用访问无效内存时 给出错误信息. Address Sanitizer 实现机理 Address Sanitizer;会在进程的内存空间中开设一段影子内存区,并将进程的整个内存空间与该内存区建 立一种映射关系;具体就是将进程内存空间中的 8...