0
私はジョブを処理するjobWorkerを持っていて、この作業者にはデータベース読み書き、ログファイル、受信apiおよびデータ計算があります。golangとのデータ競合作業者を避ける
var mystruct strcut{}
func worker(v) {
Get data from database
...
Update database status
...
useByWorker()
...
Do some computing
...
Receive API
...
Write log file
}
func useByWorker() {
mystruct = {1,2,3}
}
ここにgo-workerを実行する主な機能があります。
func main() {
var wg sync.WaitGroup
data := [][]string{}
wg.Add(1)
for k,v := range data {
k := k
v := v
go func(k int, v []string) {
fmt.Println(k,v)
worker(v)
wg.Done()
}(k, v)
}
wg.Wait()
}
データ競合の問題は、作業者に使用されるログと自分のデータが混在するようにします。どのような方法でも、ロックなしでデータ競合の問題を簡単に修正できます(Mutex.Lock)。私は仕事が労働者によってより速く扱われることを望む。
提案やヒントが役立ちます。ありがとう。
'main'にWaitGroupを使用すると、' Add(1) 'を一度呼び出すだけですが、ゴルーチンの' data'の各要素に対して 'Done'を複数回呼び出すだけです。 – ain
「私は仕事がより早く労働者によって処理できるようにしたい。 ---真剣にいくつかのナノ秒でコードの速度を遅くすると思いますか? – zerkms
APIまたはDB応答の待機時に時間が消費されます。この質問の主な問題は、これらの仕事をデータ競争なしに、同時に、かつ、独立してどのようにすべきかということです。 – Weiwei