首頁 >後端開發 >Golang >golang 協程佔多大內存

golang 協程佔多大內存

(*-*)浩
(*-*)浩原創
2019-12-31 11:09:325119瀏覽

golang 協程佔多大內存

本質上,goroutine 就是協程。  

不同的是,Golang 在runtime、系統呼叫等多方面對goroutine 調度進行了封裝和處理,當遇到長時間執行或進行系統呼叫時,會主動把當前goroutine 的CPU (P) 轉讓出去,讓其他goroutine 能被調度並執行,也就是Golang 從語言層面支持了協程。

Golang 的一大特色就是從語言層面原生支援協程,在函數或方法前面加 go關鍵字就可建立一個協程。      (建議學習:go

協程(coroutine)是Go語言中的輕量級執行緒實現,由Go執行時間(runtime)管理。

GO版本:go version 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

#總結:20萬個協程佔用了500M記憶體50萬KB

#平均一個協程佔用2.5KB

#

以上是golang 協程佔多大內存的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn