【发布时间】:2012-09-04 14:37:20
【问题描述】:
我正在尝试创建一个具有推送和弹出功能的队列结构。
我需要使用 10 个线程推送和另外 10 个线程弹出数据,就像我在下面的代码中所做的那样。
问题:
- 我需要打印出我推送/弹出的数量,但我不知道该怎么做。
- 有什么方法可以加快我的代码速度吗?代码对我来说太慢了。
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
}
}
【问题讨论】:
标签: go