Go 言語における同時実行性と並列性の違いの探求

王林
リリース: 2024-03-12 21:33:03
オリジナル
439 人が閲覧しました

Go 言語における同時実行性と並列性の違いの探求

Go 言語における並行性と並列性の違いについての調査

Go 言語では、並行性と並列性の概念をよく耳にします。これら 2 つの単語は同じ意味でよく使われますが、実際には異なる意味を持っています。この記事では、Go 言語における同時実行と並列処理の違いについて説明し、具体的なコード例を使用してそれらの違いを説明します。

まず、同時実行性と並列処理の定義を見てみましょう:

  • 同時実行性 (同時実行性) は、一定期間内に複数のタスクを処理することを指します。異なる場合があります。これらのタスクを同時に実行するのではなく、交互に実行して、システムの応答性と効率を向上させます。
  • 並列処理とは、複数のタスクを同時に処理することを指します。これらのタスクは実際に複数のプロセッサ上で同時に実行され、より高速な処理速度を実現します。

Go 言語では、同時実行性は goroutine によって実現されます。 Goroutine は Go 言語の軽量スレッドで、Go 言語のランタイム システムによってスケジュールされ、単一スレッドでの同時実行を実現します。 goroutine はキーワード go を使用して作成できるため、独立した goroutine で関数を実行できます。

簡単な例で同時実行と並列処理の違いを説明します。

package main

import (
    "fmt"
    "runtime"
    "time"
)

func task(id int) {
    for i := 0; i < 5; i++ {
        fmt.Printf("Task %d: %d
", id, i)
        time.Sleep(time.Millisecond * 100)
    }
}

func main() {
    runtime.GOMAXPROCS(2) // 设置使用的最大CPU核心数

    go task(1)
    go task(2)

    time.Sleep(time.Second)
}
ログイン後にコピー

上のコードでは、2 つの関数 task を定義します。それぞれの関数はタスクを出力します。情報を 5 回印刷し、各印刷後に 100 ミリ秒間停止します。 main 関数では、go キーワードを使用して 2 つのゴルーチンを開始し、これら 2 つのタスク関数を実行します。最後に、time.Sleep 関数を使用して 1 秒間待機し、2 つのゴルーチンが実行を完了するのに十分な時間を確保します。

上記のコードを実行すると、2 つのゴルーチンのタスクが同時にではなく交互に実行されることがわかります。これは同時実行性の概念です。タスクは同じスレッド上で交互に実行されますが、ほぼ同時に発生するため、時間的には並列に感じられます。

並列処理を実現するために、コードにいくつかの調整を加えることができます:

package main

import (
    "fmt"
    "runtime"
)

func task(id int) {
    for i := 0; i < 5; i++ {
        fmt.Printf("Task %d: %d
", id, i)
    }
}

func main() {
    runtime.GOMAXPROCS(2) // 设置使用的最大CPU核心数

    go task(1)
    go task(2)

    // 等待任务完成
    fmt.Scanln()
}
ログイン後にコピー

この変更されたコードでは、タスク関数の時間停止を削除し、fmt を渡します。 Scanln() 関数により、プログラムはユーザー入力を待機します。このようにして、2 つの goroutine タスクは時間停止によってブロックされないため、実際には同時に実行され、並列効果が得られます。

この例を通して、同時実行と並列処理の違いが明確にわかります。並行性は単一のスレッドで複数のタスクを交互に実行することで効率を向上させますが、並列性は実際に複数のタスクを複数のプロセッサで同時に実行します。 Go 言語では、同時実行性と並列性は goroutine および GOMAXPROCS 関数を通じて簡単に実現できます。

一般に、Go 言語での同時プログラミングのアプリケーションを理解するには、同時実行性と並列処理の概念を習得することが重要です。 2 つの違いを深く理解することによってのみ、Go 言語の機能をより適切に活用して効率的な同時実行プログラムを作成できるようになります。

この記事の考察を通じて、読者が Go 言語の同時実行性と並列性の概念をより明確に理解し、また具体的なコード例を通じてこれら 2 つの概念についての理解を深められることを願っています。実際の G​​o 言語プログラミングでは、並行性と並列テクノロジを柔軟に使用することで、プログラムのパフォーマンスと効率を向上させることができます。

以上がGo 言語における同時実行性と並列性の違いの探求の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート