1 Star 2 Fork 0

tym_hmm / go-ericParticiple

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
goroutines.go 1.45 KB
一键复制 编辑 Web IDE 原始数据 按行查看 历史
天蝎儿 提交于 2022-03-18 12:00 . init
// 测试sego并行分词速度
package main
import (
"bufio"
"fmt"
"gitee.com/tym_hmm/go-ericParticiple"
"log"
"os"
"runtime"
"time"
)
var (
segmenter = ericParticiple.Segmenter{}
numThreads = runtime.NumCPU()
task = make(chan []byte, numThreads*40)
done = make(chan bool, numThreads)
numCRuns = 50
)
func worker() {
for line := range task {
segmenter.Segment(line)
}
done <- true
}
func main() {
// 将线程数设置为CPU数
runtime.GOMAXPROCS(numThreads)
// 载入词典
segmenter.LoadDictionary("../data/dictionary.txt")
// 打开将要分词的文件
file, err := os.Open("../testdata/bailuyuan.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
// 逐行读入
scanner := bufio.NewScanner(file)
size := 0
lines := [][]byte{}
for scanner.Scan() {
var text string
fmt.Sscanf(scanner.Text(), "%s", &text)
content := []byte(text)
size += len(content)
lines = append(lines, content)
}
// 启动工作线程
for i := 0; i < numThreads; i++ {
go worker()
}
log.Print("开始分词")
// 记录时间
t0 := time.Now()
// 并行分词
for i := 0; i < numCRuns; i++ {
for _, l := range lines {
task <- l
}
}
close(task)
// 确保分词完成
for i := 0; i < numThreads; i++ {
<-done
}
// 记录时间并计算分词速度
t1 := time.Now()
log.Printf("分词花费时间 %v", t1.Sub(t0))
log.Printf("分词速度 %f MB/s", float64(size*numRuns)/t1.Sub(t0).Seconds()/(1024*1024))
}
Go
1
https://gitee.com/tym_hmm/go-ericParticiple.git
git@gitee.com:tym_hmm/go-ericParticiple.git
tym_hmm
go-ericParticiple
go-ericParticiple
master

搜索帮助

14c37bed 8189591 565d56ea 8189591