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” “

试图解决从文件中读取电话号码(逐行)并在go中并发散列(md5)的问题,最大并发进程数为100,创建固定数量的goroutine。尝试使用go管道和有界并行,但不起作用。有什么指导吗

这就是我所尝试的,

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)
}