Monthly Read Posts in Oct 2018
Concurrency
使用C 11 atomic operations 实现一个轻量的 lock-free stack
- pre-allocation,不需要考虑单个节点的销毁问题,所以不需要使用 hazard pointer
- free 和 head 两个列表,两个单独的 head 均可用做 sentinel
- 使用 aba counter 来避免 ABA problem
MySQL/InnoDB中,乐观锁、悲观锁、共享锁、排它锁、行锁、表锁、死锁概念的理解
感觉这篇讲的好混乱,几个概念是明显正交的都混在一起了。
瞄了一眼,基本脑子里都在找平常 locking mechanism 里的概念做映射了。
总体写的一般,而且内容有点乱。
madness 应该指的就是 epoll 对外表现的是引用 file descriptor 但是内部维护的确实 file descrption。
所以最后一个部分放 ET mode 的意图在哪?
A helper template function to wait for WaitOnAddress in a loop
A helper template function to wait for a Win32 condition variable in a loop
Template functions to solve synchronization facitilies that incur spurious wakeup.
Network
The Limitations of the Ethernet CRC and TCP/IP checksums for error detection
TCP 和 IP 的 checksum 校验可能会出现 undetectable errors,导致网络层或传输层校验通过但是应用层数据异常。
应用层需要额外的更加强效的校验机制。
When to Use What: REST, GraphQL, Webhooks, & gRPC
几种服务端API技术栈的简单介绍和选择。
TCP_NODELAY: 2018 BEST PRACTICES FOR TCP OPTIMIZATION
覆盖 Nagle’s algorithm 和 delayed ACK
以及一些“经验”是否启用 TCP_NODELAY
基于数据反馈的经验估计要结合一些网关设备来进行。
short anwser: yes
其实我在看 computer networking: a top-down approach 时里面就提到了握手第三次的segment是可以附带数据。
另外有很多 socket 相关的 API 的设计上也可以看出这点。
Programming Languages
The Cost of Enabling Exception Handling
环境 Windows VC(看起来是老版本) 32-bit build
可以看出哪怕是这个环境下,使用(SEH-based)异常的性能损耗也非常小
另外可以参考评论区,Jeff 在 64-bit 下跑出来的数据基本表明了 happy path 下开启异常的开销几乎为0。
value_ptr — The Missing C++ Smart-pointer
smart pointer with value-semantics
有点意思的搭配….
站在系统设计角度思考 goroutine
膜一下作者的深厚功力….
可以当作口水文看一下…
Misc
从 logging 的角度说,这篇文章只能说凑合,logging的几个点都有了,但是缺乏深度。
个人角度,logging system 四大 aspects:
- severity level,用于控制日志的粒度
- header / context,每条日志消息需要包含的基本上下文信息(severity level, datetime 需要注意 resolution, pid, tid, filename, line .etc),主要用于后期定位辅助或者用于后续系统的分类
- output destination, console 还是 文件,console的话, 选择 stdout 还是 stderr, 文件的话怎么做 rolling
- throughput,保证高 throughput 的优点在于如果目标的 throughput 只有最高值的 x%,那么系统可以腾出 1 - x% 的资源来做正经事,避免 logging 本身成为瓶颈
Why does HRESULT begin with H when it’s not a handle to anything?
It was indeed an HANDLE, for storing cascading failures; but was finally changed to a integer.
Short anwser: use PAGE_GUARD
and install your own exception handler.
Note: Your custom page fault handler will be called only for page faults incurred by user mode.
RFC newbie 福音。
涵盖:
- 从哪里找 RFC 文本
- 如何理解手头这份 RFC 文本的一些基本信息,比如主题、取代的旧版本,对其他主题的影响 .etc
- 阅读 RFC 时注意结合上下文,避免出现断章取义,相关章节最好一起同时阅读
- 对于一些要求词的解释(MUST / MUST NOT / REQUIRED / SHALL / SHOULD .etc)着重讲了 SHOULD 的一些潜规则
- 不要光只看 example,一定要看全完整的 section 内容,避免 example 包含错误被误导了
- 熟悉 ABNF 规则
- 注意安全部份