golang 併發實踐

2021-08-29 09:59:09 字數 1229 閱讀 3743

golang 高併發主要是依靠sync包下的api實現,首先就是waitgroup:

先說說waitgroup的用途:它能夠一直等到所有的goroutine執行完成,並且阻塞主線程的執行,直到所有的goroutine執行完成。

waitgroup總共有三個方法:add(delta int),done(),wait()。簡單的說一下這三個方法的作用。

add:新增或者減少等待goroutine的數量

done:相當於add(-1)

wait:執行阻塞,直到所有的waitgroup數量變成0

**:

type worker struct 

func newworker() worker

}// start method starts the run loop for the worker, listening for a quit channel in

// case we need to stop it

func (w worker) start()

}}()

}// stop signals the worker to stop listening for work requests.

func (w worker) stop() ()

}

job類:

type job struct 

var jobqueue chan job = make(chan job, maxqueue)

func dotask()

//這裡模擬的http介面,每次請求抽象為乙個job

func handle()

jobqueue <- job

}var (

maxworker = 1000

maxqueue = 200000

wg sync.waitgroup

)

dispatcher 類:

type dispatcher struct 

func newdispatcher() *dispatcher

}func (d *dispatcher) run()

}

測試執行**:

func benchmark_handle(b *testing.b)  

wg.wait()

}

Golang百萬級高併發實踐

go語言作為新興的語言,最近發展勢頭很是迅猛,其最大的特點就是原生支援併發。它使用的是 協程 goroutine 模型 和傳統基於 os 執行緒和程序實現不同,go 語言的併發是基於使用者態的併發,這種併發方式就變得非常輕量,能夠輕鬆執行幾萬併發邏輯。go 的併發屬於 csp 併發模型的一種實現,c...

Golang百萬級高併發實踐

go語言作為新興的語言,最近發展勢頭很是迅猛,其最大的特點就是原生支援併發。它使用的是 協程 goroutine 模型 和傳統基於 os 執行緒和程序實現不同,go 語言的併發是基於使用者態的併發,這種併發方式就變得非常輕量,能夠輕鬆執行幾萬併發邏輯。go 的併發屬於 csp 併發模型的一種實現,c...

Golang百萬級高併發實踐

寫在前面 go語言作為新興的語言,最近發展勢頭很是迅猛,其最大的特點就是原生支援併發。它使用的是 協程 goroutine 模型 和傳統基於 os 執行緒和程序實現不同,go 語言的併發是基於使用者態的併發,這種併發方式就變得非常輕量,能夠輕鬆執行幾萬併發邏輯。go 的併發屬於 csp 併發模型的一...