Practical Byzantine Fault Tolerance(PBFT)
原文
在体系结构中,只有RAW(read after write) data hazard叫做true dependency,意味着后续读指令必须等待前面的指令输出结果。而WAW,WAR等情况都可以用寄存器重命名的方法解决。
(不代表都仔细看过)
1. 网络调优
raft资料 https://raft.github.io/
1. The Problem
小心UB,使用unsafe的时候多看接口文档
不关注实现,记录如何更好使用rust编译器,或者记录一些和编译相关有用的工具。
一些类型系统之外的规则,比如Box::new()是在堆上创建变量,但如果只看函数签名pub fn new(x: T) -> Self,其实是看不出来这个规则的,这些规则只会在文档中说明。
一些资料
评价: Linearizability用时间将不同的process联系起来,是比SC更严格的一致性模型,也更符合现实生活。此外,linearizability具有组合性。
了解hazard pointer,在阅读 Hazard Pointers: Safe Memory Reclamation for Lock-Free Objects 之前,先阅读其用来举例的文章 Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms,之后可以做 https://github.com/kaist-cp/cs431 ,其中有一个编程作业就是简单版的hazard pointer,要求代码放在私有仓库,所以我的代码没有公开。
原书: Linux Kernel Development (3rd Edition)
原书: A Primer on Memory Consistency and Cache Coherence
更关注算法的证明,用起来才安心。
书名: Modern Processor Design: Fundamentals of Superscalar Processors
事务
1. 对程序性能的疑惑
课程网址 虽然标题是Computer Architecture,但这个课程和本科的体系结构课不太一样,主要关注更现代的技术,而不局限于经典的5级流水CPU设计。
记录一些想到的问题
课程主页: link
不深究C++语法细节,更多关注与Rust的共性部分。
无论是百度还是谷歌,如果直接搜索 “thread local”,出来的页面大部分都是讲 Java 的 ThreadLocal<T> 类,然后讲变量是存储在了 ThreadLocalMap 里。但是,本文要介绍的是由编译器、链接器和操作系统等联合提供的 thread local storage(TLS)功能 ,由于和硬件,操作系统有关,只关注 x86-64 为基础的 Linux ELF 格式。
1. INTRODUCTION
每个人的实现可能不同,因此对某些问题的理解也会不同,这里只是说明我自己的理解。
推荐读paper前先看这个,非常好地解释了XOR的来源
以standalone模式按默认配置启动redis-server,只考虑最基本的情况