numLogicalProcessorsIntel core i7 上是8(2 X 4 個(gè)物理核心)。Linux操作系統(tǒng)。因此,八個(gè)操作系統(tǒng)線程(M)可以并行工作。Go 運(yùn)行時(shí)可以在我的 Go 程序中分配八個(gè)上下文(P1, P2.... P8- runtime.GOMAXPROCS(numLogicalProcessors))。Go 遵循M:N線程模型,其中N是操作系統(tǒng)線程,M是 Go 程序的 go 例程。操作系統(tǒng)調(diào)度程序調(diào)度操作系統(tǒng)線程。線程狀態(tài)是WAITING, RUNNABLE& EXECUTING。Go 調(diào)度程序安排 Go 例程。Go 例程狀態(tài)是WAITING, RUNNABLE& EXECUTING。Goroutine 是一個(gè)用戶級(jí)線程。Go 程序的運(yùn)行時(shí)是否顯式創(chuàng)建這八個(gè)操作系統(tǒng)線程(M)?在將每個(gè)上下文(P)分配給每個(gè)操作系統(tǒng)線程(M)之前?如果操作系統(tǒng)線程(M1)被操作系統(tǒng)調(diào)度程序搶占(由于時(shí)間片),那么goroutine調(diào)度程序(P1)如何使用LRQ管理goroutine的狀態(tài)G1?是否P1從操作系統(tǒng)收到狀態(tài)已更改的通知M1?
Go運(yùn)行時(shí)會(huì)創(chuàng)建操作系統(tǒng)線程(M)嗎?
慕田峪7331174
2023-08-21 14:45:31