Go 哈希字符串的有界并行性
试图解决从文件中读取电话号码(逐行)并在go中并发散列(md5)的问题,最大并发进程数为100,创建固定数量的goroutine。尝试使用go管道和有界并行,但不起作用。有什么指导吗 这就是我所尝试的,Go 哈希字符串的有界并行性,go,hash,concurrency,Go,Hash,Concurrency,试图解决从文件中读取电话号码(逐行)并在go中并发散列(md5)的问题,最大并发进程数为100,创建固定数量的goroutine。尝试使用go管道和有界并行,但不起作用。有什么指导吗 这就是我所尝试的,package main 进口( “布菲奥” “fmt” “操作系统” “同步” ) func hashPhoneNumers(phoneNO字符串,ch chan struct{},group*sync.WaitGroup){ do_散列(电话号码) 主程序包 进口( “布菲奥” “fmt” “
package main
进口(
“布菲奥”
“fmt”
“操作系统”
“同步”
)
func hashPhoneNumers(phoneNO字符串,ch chan struct{},group*sync.WaitGroup){
do_散列(电话号码)
主程序包
进口(
“布菲奥”
“fmt”
“操作系统”
“同步”
)
func hashPhoneNumers(phoneNO字符串,ch chan struct{},group*sync.WaitGroup){
do_散列(电话号码)
显示您尝试过的内容。这是我尝试过的,不确定是否应该这样做,请参见,谢谢,我唯一感到困惑的部分是从文件中读取内容时,因为我必须逐行读取。您如何将其应用到上面的示例中,多次尝试都不起作用。也许这就是您想要的显示您尝试过的内容。这就是我尝试过的,n我不知道该怎么做,谢谢,我唯一感到困惑的是从文件中读取内容时,因为我必须逐行读取。你如何将其应用到上面的示例中,多次尝试都不起作用。也许这就是你想要了解的。问题,如果do_hash是一个繁重的操作,并且有100个工作人员,是吗要等到至少有一个被释放?要等到所有的100个工作进程都完成了他们的工作并退出,那么c作为计数器的确切用途是什么,c非常感谢。问题是,如果do_hash是一个繁重的操作,并且有100个工作进程,它是否要等到至少有一个被释放?要等到所有的100个工作进程都被释放完成他们的工作,并且非常好,那么c作为计数器的目的是什么呢,c
package main
import (
"bufio"
"fmt"
"os"
"sync"
)
func hashPhoneNumers(phoneNO string, ch chan struct{}, group *sync.WaitGroup) {
do_hash(phoneNO)
<-ch
group.Done()
}
func do_hash(s string) {
fmt.Println("do hash: ", s)
}
func main() {
c := make(chan struct{}, 100)
file, err := os.Open("file.txt")
if err != nil {
fmt.Println(err)
os.Exit(-1)
}
defer file.Close()
line := bufio.NewScanner(file)
wg := sync.WaitGroup{}
for line.Scan() {
// with a maximum of 100 concurrent process maximum
c <- struct{}{}
wg.Add(1)
go hashPhoneNumers(line.Text(), c, &wg)
}
// wait all goroutines done
wg.Wait()
close(c)
}