ホームページ > バックエンド開発 > Golang > golangにはプロセスがありますか?

golangにはプロセスがありますか?

青灯夜游
リリース: 2022-12-26 17:38:27
オリジナル
4925 人が閲覧しました

Golang にはプロセスがあります。プロセスは、オペレーティング システムにおけるプログラムの実行プロセスであり、システムによるリソースの割り当てとスケジューリングの基本単位です。プロセスは動的概念であり、システムの実行中にリソースを割り当てて管理するための基本単位です。各プロセスには独自のアドレス空間があります。 Go 言語は複数のプロセスをサポートしており、そのスレッド モデルは MPG モデルであり、一般に Go プロセスとカーネル スレッドの間には多対多の対応関係があります。

golangにはプロセスがありますか?

このチュートリアルの動作環境: Windows 7 システム、GO バージョン 1.18、Dell G3 コンピューター。

1. プロセスとスレッドについて

1. プロセス

プロセスとは、オペレーティング システム内のプログラムです。プロセスは、システムによるリソース割り当てとスケジューリングの基本単位です。プロセスは動的概念であり、プログラム実行中にリソースを割り当て、管理するための基本単位です。各プロセスは独自のアドレス空間を持ちます。プロセスには、初期状態、実行状態、待機状態、準備完了状態、終了状態の少なくとも 5 つの基本状態があります。

平たく言えば: プロセスとは実行中のプログラムです。

2. スレッド

スレッドはプロセスの実行インスタンスであり、プログラム実行の最小単位であり、プロセスよりも小さく、独立して実行できる基本単位です。 。

平たく言えば: プロセスは複数のスレッドを作成でき、同じプロセス内の複数のスレッドを同時に実行できます。プログラムを実行したい場合は、少なくとも一つのプロセス。

golangにはプロセスがありますか?

golangにはプロセスがありますか?

#2. 同時実行性と並列処理について

#1.同時実行性

複数のスレッドが同時に位置をめぐって競合し、競合するスレッドのみが実行されます。各期間に実行されるスレッドは 1 つだけです。

golangにはプロセスがありますか?

2. Parallel

複数のスレッドを同時に実行可能 各時間帯で複数のスレッドを実行可能同時に。

golangにはプロセスがありますか?

3. 平たく言えば、

シングルコア CPU 上で実行されるマルチスレッド プログラムは同時実行性であり、マルチコア CPU では並列実行されます。スレッドの数が CPU コアの数より大きい場合、マルチスレッド プログラムは複数の CPU 上で同時実行および並列実行されます。

3. Goroutine コルーチンとメイン スレッド

1. メイン スレッド

は、次のように理解できます。スレッドまたはプロセスでは、golang プログラムのメインスレッドで複数のコルーチンを有効にすることができます。 golang の複数のコルーチンは、同時実行または並列処理を実現できます。

2. コルーチン

は、カーネルに対して透過的なユーザーレベルのスレッドとして理解できます。つまり、システムはコルーチンの存在を認識しません。ユーザー独自のプログラムによって完全にスケジュールされます。 golang の大きな特徴は、言語の観点からコルーチンをネイティブにサポートしていることであり、関数またはメソッドの前に go キーワードを追加することでコルーチンを作成できます。 golang のコルーチンは goroutine であると言えます。

golangにはプロセスがありますか?

# Golang のマルチコルーチンは、他の言語のマルチスレッドに似ています。

3. マルチコルーチンとマルチスレッド

Golang の各ゴルーチン (コルーチン) は、デフォルトで Java や C スレッドよりもはるかに少ないメモリを占有します。 OS スレッド (オペレーティング システム スレッド) は通常、固定スタック メモリ (通常約 2MB) を持ちます。ゴルーチン (コルーチン) が占めるメモリは非常に小さく、わずか約 2KB です。複数のゴルーチンのゴルーチン切り替えのスケジューリング オーバーヘッドは、スレッドのオーバーヘッドよりもはるかに小さくなります。これが、Golang を使用する大企業が増えている理由の 1 つです。

4. go キーワードの実際の操作

1. 順次実行

package main

import "fmt"

func test() {
	for i := 0; i <h3 id="2.%20%E5%8A%A0%E5%85%A5go"><strong>2. go に参加</strong></h3><pre class="brush:php;toolbar:false">package main

import "fmt"

func test() {
	for i := 0; i <h3 id="3.%20%E5%8A%A0%E5%85%A5%E6%97%B6%E9%97%B4"><strong>3. 参加時間</strong></h3><pre class="brush:php;toolbar:false">package main

import (
    "fmt"
    "time"
)

// 加入时间
func test1() {
	for i := 0; i <h3 id="4.%20%E4%B8%BB%E7%BA%BF%E7%A8%8B%E6%89%A7%E8%A1%8C%E5%BF%AB%E7%9A%84%E6%83%85%E5%86%B5"><strong>4. メインスレッドが迅速に実行されるとき</strong></h3><pre class="brush:php;toolbar:false">package main

import (
    "fmt"
    "time"
)

func test1() {
	for i := 0; i <h3 id="5.%20sync.WaitGroup%E8%A7%A3%E5%86%B3%E4%B8%8D%E7%AD%89%E5%BE%85"><strong>5. 同期.WaitGroup は待機しない問題を解決します</strong></h3><pre class="brush:php;toolbar:false">package main

import (
    "fmt"
    "time"
    "sync"
)

var wg sync.WiatGroup

func test2() {
	for i := 0; i <h3 id="6.%20%E5%A4%9A%E5%8D%8F%E7%A8%8B%E5%B9%B6%E5%8F%91%E5%B9%B6%E8%A1%8C%E6%89%A7%E8%A1%8C"><strong>6. 複数のコルーチンの同時実行</strong></h3><pre class="brush:php;toolbar:false">package main

import (
    "fmt"
    "time"
    "sync"
)

func hello(num int) {
	defer wg.Done()
	for i := 0; i <h2 id="%E4%BA%94%E3%80%81%E8%AE%BE%E7%BD%AEgolang%E8%BF%90%E8%A1%8C%E6%97%B6%E5%8D%A0%E7%94%A8%E7%9A%84cpu%E6%A0%B8%E6%95%B0%E9%87%8F%EF%BC%88%E4%B8%8D%E6%98%AF%E5%BE%88%E9%87%8D%E8%A6%81%EF%BC%89"><strong>5. 占有される CPU コアの数を設定します実行時 by golang (あまり重要ではありません) </strong></h2><pre class="brush:php;toolbar:false">package main

import (
    "fmt"
    "runtime"
)

func main() {
    // 设置程序占用几个cpu进行执行,默认是全部
	// 获取计算机cpu个数
	cpuNum := runtime.NumCPU()
	fmt.Println(cpuNum) // 6 我本机电脑是6核cpu

	// 设置占用cpu个数
	runtime.GOMAXPROCS(2)
	fmt.Println("ok")
}
ログイン後にコピー

プログラミング関連の知識の詳細については、プログラミング ビデオをご覧ください。 !

以上がgolangにはプロセスがありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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