原创 Golang併發實踐:筆記本秒變暖寶寶

早晨來到辦公室,手是非常涼啊,一模筆記本,比手還涼,手指都快不能動了。歪腦筋一動,把筆記本編程暖手寶先暖暖手吧,這不就都暖和了。怎麼變呢?當然是你學的Golang併發啦。 package main import ( "fmt"

原创 Golang併發模型:輕鬆入門select

之前的文章都提到過,Golang的併發模型都來自生活,select也不例外。舉個例子:我們都知道一句話,“吃飯睡覺打豆豆”,這一句話裏包含了3件事: 媽媽喊你吃飯,你去吃飯。 時間到了,要睡覺。 沒事做,打豆豆。 在Golang裏,se

原创 以太坊源碼分析:交易緩衝池txpool

區塊鏈就是何交易打交道,我們今天就介紹下,交易處理過程中的一個重要組成部分:txpool。這篇文章主要從功能角度介紹,通過這篇文章會了解: txpool的在交易中的位置和作用。 txpool的功能,核心組成部分queued和pending

原创 Golang併發模型:併發協程的優雅退出

goroutine作爲Golang併發的核心,我們不僅要關注它們的創建和管理,當然還要關注如何合理的退出這些協程,不(合理)退出不然可能會造成阻塞、panic、程序行爲異常、數據結果不正確等問題。這篇文章介紹,如何合理的退出goroutin

原创 Golang併發模型:輕鬆入門流水線FAN模式

前一篇文章《Golang併發模型:輕鬆入門流水線模型》,介紹了流水線模型的概念,這篇文章是流水線模型進階,介紹FAN-IN和FAN-OUT,FAN模式可以讓我們的流水線模型更好的利用Golang併發,提高軟件性能。但FAN模式不一定是萬能,

原创 Golang併發模型:輕鬆入門流水線模型

Golang作爲一個實用主義的編程語言,非常注重性能,在語言特性上天然支持併發,它有多種併發模型,通過流水線模型系列文章,你會更好的使用Golang併發特性,提高你的程序性能。 這篇文章主要介紹流水線模型的流水線概念,後面文章介紹流水線模型

原创 以太坊事件框架

過去在學Actor模型的時候,就認爲異步消息是相當的重要,在華爲的時候,也深扒了一下當時產品用的消息模型,簡單實用,支撐起了很多模塊和業務,但也有一個缺點是和其他的框架有耦合,最近看到以太坊的事件框架,同樣簡單簡潔,理念很適合初步接觸事件框

原创 以太坊源碼分析:fetcher模塊和區塊傳播

前言 這篇文章從區塊傳播策略入手,介紹新區塊是如何傳播到遠端節點,以及新區塊加入到遠端節點本地鏈的過程,同時會介紹fetcher模塊,fetcher的功能是處理Peer通知的區塊信息。在介紹過程中,還會涉及到p2p,eth等模塊,不會專門介

原创 以太坊源碼分析:共識(3)Ethash

前言 Ethash實現了PoW,PoW的精妙在於通過一個隨機數確定,礦工確實做了大量的工作,並且是沒有辦法作弊的。接下來將介紹: Ethash的挖礦本質。 Ethash是如何挖礦的。 如何驗證Ethash的隨機數。 <!--more--

原创 以太坊源碼分析:共識(2)引擎

前言 engine是以太坊封定義的一個接口,它的功能可以分爲3類: 驗證區塊類,主要用在將區塊加入到區塊鏈前,對區塊進行共識驗證。 產生區塊類,主要用在挖礦時。 輔助類。 接下來我們看一下engine具體定義了哪些功能,還有各功能的使用

原创 以太坊源碼分析:共識(1)礦工

前言 礦工在PoW中負責了產生區塊的工作,把一大堆交易交給它,它生成一個證明自己做了很多工作的區塊,然後將這個區塊加入到本地區塊鏈並且廣播給其他節點。 接下來我們將從以下角度介紹礦工: 角色。礦工不是一個人,而是一類人,可以把這一類人分成

原创 Go依賴包管理工具,3分鐘掌握govendor

網上寫govendor的博文不少,但從安裝到介紹,總看上去有些沉重,下面奉上一篇簡單的教程,3分鐘入門。 第1部分 簡明教程 2步走,3分鐘輕鬆搞定Go項目的依賴。 第1步 安裝 go get -u github.com/kardianos

原创 你知道defer的坑嗎?

你是不是覺得defer很簡單、很好用,但也許你掉坑裏了都不知道! 這篇文章不介紹defer的常用功能,而是介紹你在用defer時,也許會踩的坑。 defer允許我們進行一些函數執行完成後的收尾工作,並且代碼更加簡潔,例如: 關閉文件流:

原创 一招教你無阻塞讀寫Golang channel

無論是無緩衝通道,還是有緩衝通道,都存在阻塞的情況,教你一招再也不遇到channel阻塞的問題。 這篇文章會介紹,哪些情況會存在阻塞,以及如何使用select解決阻塞。 阻塞場景 阻塞場景共4個,有緩存和無緩衝各2個。 無緩衝通道的特點是,

原创 Golang的WaitGroup陷阱

sync.WaitGroup是併發環境中,一個相當常用的數據結構,用來等待所有協程的結束,在寫代碼的時候都是按着例子的樣子寫的,也沒用深究過它的使用。前幾日想着能不能在協程中執行Add()函數,答案是不能,這裏介紹下。 陷阱在WaitGro