环境搭建

前提需要电脑中存在gitdockerdocker-compose命令以及有golang开发环境。

首先创建目录存放Fabric代码,注意路径和权限,在启动服务时候会向其中写一些文件,最开始我就是没注意到这点报错了。

1
sudo mkdir /opt/gopath/src/github.com/hyperledger/

进入刚才创建的目录后拉取代码:

1
2
cd /opt/gopath/src/github.com/hyperledger
git clone https://github.com/hyperledger/fabric.git

当前版本是1.1。

阅读全文

Raft算法

发布在 区块链

相比与Paxos算法,Raft更容易理解。首先推荐个动画视频 (注意这个动画真的基于raft算法,所以每次选举出的节点都是不同的,我观看某些章节时候甚至出现过3次选举过程),然后是raft论文中文版raft主页,基本结合这3个网站就能理解raft了。

在Raft算法中,有3种角色:

  • Leader
  • Follower
  • Candidate

大体分为2个过程:

  1. 选举(Leader Election)
  2. 日志同步(Log Replication) 阅读全文

原文,互斥锁(Mutex)也是go并发系列最后一篇文章。

临界区

在说互斥锁前,理解并发编程中的临界区(Critical section)是十分重要的。当一个程序并发执行时,共享资源不应该在同一时刻被多个goroutine修改。这段修改共享资源的代码就叫做临界区。举个例子,我们有一个代码片段用于修改变量x自增1。

1
x = x+1

如果上面的代码在唯一的goroutine中执行,不会有任何问题。

阅读全文

原文

什么是Select

select语法用来从多个读/写的channel中选择一个,如果没有任何channel就绪select语句将被阻塞。如果多个就绪,则随机选择一个。语法和switch类似,除了case后面跟随的是channel。

阅读全文

原文,这里为了方便理解我把worker pools翻译成线程池。

什么是缓冲区Channel

之前讨论的所有channel都是不带缓冲区的,因此读取和写入都会被阻塞。创建一个带缓冲区的channel也是可能的,这种channel只有在缓冲区满后再写入或者读取一个空的channel时才会被阻塞。

创建一个带缓冲区的channel需要一个额外的参数容量来表明缓冲区大小:

1
ch := make(chan type, capacity)

上面代码中的 capacity 需要大于0,如果等于0的话则是之前学习的无缓冲区channel。

阅读全文

原文,建议理解并发(concurrency)、并行(parallelism)区别后再看这方面的内容。

Goroutines是啥?

Goroutines是一个可以和其他函数或方法并发执行的函数或方法。也可以把它理解为轻量级的线程(roy注:这话听起来和大python中的协程很像啊!),而创建Goroutine的开销却远远小于线程。因此在大多数的Go程序都可以并发执行成千上万的Goroutine。

阅读全文
  • 第 1 页 共 1 页
作者的图片

Roy

微信公众号:hi-roy


野生程序猿


China