本質的に、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 サイトの他の関連記事を参照してください。