coroutine
进程、线程、协程
线程是CPU调度的最小单位, 进程是资源分配的最小单位。对于线程和进程,我们可以这么理解:
- 当进程只有一个线程时,可以认为进程就等于线程。
- 当进程拥有多个线程时,这些线程会共享相同的虚拟内存和全局变量等资源。这些资源在上下文切换时是不需要修改的。
- 线程也有自己的私有数据,比如栈和寄存器等,这些在上下文切换时也是需要保存的。
协程作为用户态线程,也是轻量级的线程,用来解决高并发场景下线程切换的资源开销。协程跟线程是有区别的
线程是CPU调度的最小单位, 进程是资源分配的最小单位。对于线程和进程,我们可以这么理解:
协程作为用户态线程,也是轻量级的线程,用来解决高并发场景下线程切换的资源开销。协程跟线程是有区别的
传统的主从架构(Primary- secondary)数据库的写入能力有限,因为其使用单个主节点来写入,从节点只是同步数据。所以一些系统采用无共享架构(shared-nothing),实现了可扩展的多主节点集群,但带来了分布式事务的开销和性能损失。最近,出现基于共享存储(shared-stroage)的多主节点云原生数据库,存算分离,避免了分布式事务,但在高冲突场景下仍表现不佳,原因有冲突解决、数据融合等。
3A主要实现的是领导者选举和心跳(没有日志条目的AppendEntriesRPC)。
基本上根据论文的图2来定义结构体。Raft结构体加上electionTimeOut bool来标记某个服务器是否超时,超时未收到心跳需要发起新一轮选举。

Raft是一种用于管理复制日志的共识算法。它的结果等价与Paxos,并且效率相当,但它的结构更容易理解。为了增强可理解性,Raft将共识的关键要素(例如领导者选举、日志复制和安全性)分离开来,并强制执行更强的一致性要求,从而减少了需要考虑的状态数量。此外,Raft 还引入了一种新的集群成员变更机制,该机制通过使用重叠的多数派来保证安全性。
本次试验中,将为一台机器构建一个键值服务器,该服务器确保即使网络故障,每个操作也只执行一次,且操作是线性化的。后面的实验将会复制这样的服务器来处理服务器崩溃。
这次实验将构建一个MapReduce系统。需要实现一个worker进程,它调用应用程序Map和Reduce函数并处理阅读和写入文件,以及一个coordinator进程,它将任务分发给worker并处理失败的worker。