ホームページ  >  記事  >  バックエンド開発  >  golang コルーチンはどれくらいのメモリを占有しますか?

golang コルーチンはどれくらいのメモリを占有しますか?

(*-*)浩
(*-*)浩オリジナル
2019-12-31 11:09:325080ブラウズ

golang コルーチンはどれくらいのメモリを占有しますか?

本質的に、Goroutine はコルーチンです。

違いは、Golang はランタイムやシステム コールなどの多くの側面でゴルーチンのスケジューリングをカプセル化して処理することです。長時間の実行やシステム コールが発生すると、現在のゴルーチンの CPU をアクティブに使用して、 (P) 他のゴルーチンをスケジュールして実行できるように転送する つまり、Golang は言語レベルでコルーチンをサポートします。

Golang の主要な機能の 1 つは、言語レベルでコルーチンをネイティブにサポートしていることです。関数またはメソッドの前に go キーワードを追加することでコルーチンを作成できます。 (推奨学習: go)

コルーチンは Go 言語の軽量スレッド実装であり、Go ランタイムによって管理されます。

GO バージョン: go バージョン go1.4.2 linux/amd64

テスト環境:

[root@localhost mpro]# more /proc/cpuinfo | grep "model name"
model name      : Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz
model name      : Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz
model name      : Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz
model name      : Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz
[root@localhost mpro]# 
[root@localhost mpro]# grep MemTotal /proc/meminfo
MemTotal:        3868776 kB
[root@localhost mpro]# getconf LONG_BIT
64
[root@localhost mpro]# more /etc/redhat-release
CentOS Linux release 7.1.1503 (Core)

テストケース:

package main
 
import (
    "time"
)
 
func main() {
    for i := 0; i < 200000; i++ {
        go func() {
            time.Sleep(5 * time.Second)
        }()
    }
 
    time.Sleep(10 * time.Second)
}

プログラム実行前:

top - 18:53:19 up 19 min,  3 users,  load average: 0.00, 0.04, 0.11
Tasks: 522 total,   1 running, 521 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us,  0.2 sy,  0.0 ni, 99.6 id,  0.0 wa,  0.0 hi,  0.1 si,  0.0 st
KiB Mem :  3868776 total,  3327732 free,   235764 used,   305280 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  3397344 avail Mem

プログラム実行後:

top - 18:53:37 up 19 min,  3 users,  load average: 0.00, 0.04, 0.11
Tasks: 524 total,   1 running, 523 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.2 us, 10.6 sy,  0.0 ni, 88.2 id,  0.0 wa,  0.0 hi,  0.1 si,  0.0 st
KiB Mem :  3868776 total,  2793732 free,   752512 used,   322532 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  2880016 avail Mem

概要: 200,000 個のコルーチンは 500M のメモリと 500,000 KB を占有します

平均して、1 つのコルーチンは 2.5KB

を占有します

以上がgolang コルーチンはどれくらいのメモリを占有しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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