ホームページ >バックエンド開発 >Golang >Golang 関数は同時プログラミングにどのように使用されますか?

Golang 関数は同時プログラミングにどのように使用されますか?

PHPz
PHPzオリジナル
2024-04-12 09:36:021121ブラウズ

Go 言語は、Goroutine を通じて同時プログラミングを実装しており、軽量のスレッドを同時に実行できます。 go キーワードを使用して goroutine を作成し、パイプ (chan タイプ) 経由で通信できます。実際には文字列を並列検索し、各ゴルーチンの検索結果を受け取るパイプラインを作成することで検索速度を向上させます。

Golang 関数は同時プログラミングにどのように使用されますか?

Go 関数を使用した同時プログラミング

Go 言語には、同時プログラミングに使用できる Goroutine と呼ばれる軽量のスレッドが用意されています。 Goroutine は同時に実行できるため、アプリケーションのパフォーマンスと応答性が向上します。

Goroutine を作成するには、go キーワードに続いて、実行する関数を使用します。

go func() {
    fmt.Println("这是一个 Goroutine!")
}

Goroutine は値を送受信することもできます。 chan タイプを使用して、ゴルーチン間の通信を可能にするパイプラインを作成します。

// 创建管道
ch := make(chan string)

// Goroutine 发送值
go func() {
    ch <- "消息 1"
    ch <- "消息 2"
}

// 主程序接收值
for msg := range ch {
    fmt.Println(msg)
}

実用的なケース: 文字列の並列検索

文字列を検索する必要があるファイルのリスト。 Goroutine を使用してこれを並行して実行し、検索を高速化できます。

// 文件列表
files := []string{"file1.txt", "file2.txt", "file3.txt"}

// 创建管道
result := make(chan string)

// Goroutine 并行查找字符串
for _, file := range files {
    go func(file string) {
        data, err := ioutil.ReadFile(file)
        if err != nil {
            result <- file + ": " + err.Error()
            return
        }

        result <- file + ": " + strconv.Itoa(strings.Count(string(data), "foo"))
    }(file)
}

// 主程序打印结果
for result := range result {
    fmt.Println(result)
}

この例を使用すると、各ファイル内の文字列 "foo" の出現数を並行して見つけることができ、シングルスレッド検索のパフォーマンス。

以上がGolang 関数は同時プログラミングにどのように使用されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。