3 21 Go之多核並行化

2022-10-09 03:48:13 字數 1274 閱讀 4917

首先了解什麼是併發什麼是並行

注意:

注意區分什麼是goroutine在併發和並行章節已經提到了.

獲取當前作業系統cpu的核心數:

示例**:

package main

​import (

"fmt"

"runtime")​

/*呼叫runtime包下的函式獲取到當前作業系統的cpu核心數

*/func main()

fmt.printf("執行緒%d, sum值為:%d\n", index, sum)

}(i)}}

注意:

在呼叫的時候不能直接使用傳統的go run命令,需要使用go run -race命令才能看到goroutine當中的結果

模擬平行計算任務

計算 n 個整型數的總和。

將所有整型數分成 m 份,m 即 cpu 的個數。讓每個 cpu 開始計算分給它的那份計算任務,最後將每個 cpu 的計算結果再做一次累加,

得到所有 n 個整型數的總和

示例**:

package main

​import "runtime"

​type vector float64

​// op函式是乙個公共累加函式

func (v vector) op(num float64) float64

​// 該型別實現的函式(執行運算函式)

func (v vector) dosome(i, n int, u vector, c chan int)

// 將結果傳輸回到channel當中

c <- 1}​

// 設定cpu數量

var ncpu = runtime.numcpu()

const ncpu = 8 // 這裡注意常量和變數的區別,變數的宣告和賦值不能夠傳遞給常量

​// 該型別分配的函式(分配cpu函式)

func (v vector) doall(u vector)

​// 等待所有cpu完成任務將資料放入緩衝通道

for i := 0; i < ncpu; i++

}

注意:

Go之路之go語言結構

package main 定義了包名,必須在原始檔中非注釋的第一行指名這個檔案屬於哪個包,每個go應用程式都包含乙個名為main的包 import fmt 告訴go編譯器這個程式需要使用fmt包,fmt包含了格式化i o的函式 func main 需要注意 在go程式中,一行代表乙個語句的結束,結尾...

3 21 BI之SSIS之資料流轉換(漸變維度)

bi之ssis之資料流轉換 漸變維度 1 漸變維度 1.1 維度中的某些屬性會隨著時間的變化而變化時,我們稱該維度為漸變維度。比如,使用者維度中的手機號 住址等資訊會隨著時間變化,那麼使用者維度就是漸變維度。1.2 漸變維度需要新增兩個字段,dimbegintime和dimendtime,來記錄漸變...

go例項之函式

示例 如下 1 package main 23 import fmt 45 here s a function that will take an arbitrary number6 of ints as arguments.7 func sum nums int 13 fmt.println to...