Gewusst wie: implementieren Sie einen Zähler bei der Verwendung von golang die goroutine?

Ich versuche zu machen ein queue struct, dass die push und pop Funktionen.

Ich 10 threads schieben und weitere 10 threads pop-Daten, nur wie ich in dem code unten.

Fragen :
1. Ich muss ausgedruckt, wie viel ich habe geschoben/aufgetaucht, aber ich weiß nicht, wie das zu tun.
2. Ist es irgendwie beschleunigen mein code ? der code ist zu langsam für mich.

package main

import (
    "runtime"
    "time"
)

const (
    DATA_SIZE_PER_THREAD = 10000000
)

type Queue struct {
    records string
}


func (self Queue) push(record chan interface{}) {
    //need push counter
    record <- time.Now()
}

func (self Queue) pop(record chan interface{}) {
    //need pop counter
    <- record
}

func main() {
    runtime.GOMAXPROCS(runtime.NumCPU())
    //record chan
    record := make(chan interface{},1000000)
    //finish flag chan
    finish := make(chan bool)
    queue := new(Queue)
    for i:=0; i<10; i++ {
        go func() {
            for j:=0; j<DATA_SIZE_PER_THREAD; j++ {
                queue.push(record)
            }
            finish<-true
        }()
    }
    for i:=0; i<10; i++ {
        go func() {
            for j:=0; j<DATA_SIZE_PER_THREAD; j++ {
                queue.pop(record)
            }
            finish<-true
        }()
    }
    for i:=0; i<20; i++ {
        <-finish
    }
}
InformationsquelleAutor MrROY | 2012-09-04
Schreibe einen Kommentar