Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
goroutineの仕組みについて
Search
sivchari
November 13, 2021
1.6k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
goroutineの仕組みについて
Go Conference 2021 Autumnで発表した資料です
sivchari
November 13, 2021
More Decks by sivchari
See All by sivchari
go test を速くする
sivchari
1
400
govalid ~ Type-safe validation tool ~
sivchari
0
170
Go1.25 リリースパーティ ~ nil pointer bug ~
sivchari
0
160
Google Developer Group - DevFest Tokyo 2025
sivchari
0
170
Who tests the Tests ?
sivchari
0
210
Go 1.26 リリースパーティ
sivchari
0
240
静的解析 x Kubernetes API Conventions = Kube API Linter ~ ベストプラクティスに準拠したカスタムリソースの作り方と運用 ~
sivchari
0
250
What's GOCACHEPROG ?
sivchari
1
600
gh_extensionsによる快適なOSS生活.pdf
sivchari
0
200
Featured
See All Featured
Scaling GitHub
holman
464
140k
Documentation Writing (for coders)
carmenintech
77
5.5k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
620
How GitHub (no longer) Works
holman
316
150k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
420
Being A Developer After 40
akosma
91
590k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Fireside Chat
paigeccino
42
4k
Bash Introduction
62gerente
615
220k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.8k
Transcript
goroutineͷΈʹ͍ͭͯ ~Go Conference 2021 Autumn~
w 5BLVNB4IJCVZB!TJWDIBSJ w ଔ$ZCFS"HFOU ༧ఆ w όοΫΤϯυΤϯδχΞ w MJOUFS
044͕͖ ࣗݾհ
w (PͷSVOUJNFΛࢧ͑Δཁૉ w HPSPVUJOFͷϥΠϑλΠϜ w HPSPVUJOFͷεέδϡʔϦϯά ͢͜ͱ
~Let's Go~
~GoͷruntimeΛࢧ͑Δཁૉ~
w (HPSPVUJOF w .ϚγϯεϨου w 1HPSPVUJOFΛ࣮ߦ͢ΔϦιʔε w TDIFEάϩʔόϧͰϢχʔΫɺશͯͷ1Ͱڞ༗͞ΕΔ ొਓ
શମ૾ TDIFE SVOR NJEMF QJEMF ( 1 ( (
( ( ( ( 1 . . . 1 1 1 . . ( ( ( SVOR ( ( ( ( ( ( SVOR ( ( ( ( ( (
શମ૾ TDIFE SVOR NJEMF QJEMF ( 1 ( (
( ( ( ( 1 . . . 1 1 1 . . ( ( ( SVOR ( ( ( ( ( ( SVOR ( ( ( ( ( (
w NH ( Λ࣮ߦ͍ͯ͠ΔN . w TDIFE1$ͳͲͷΛอ࣋͢ΔελοΫ w BUPNJDTUBUVTHPSPVUJOFͷঢ়ଶ
ͭ w HPQDHPSPVUJOFΛੜͨ͠HPͷ1$ w TUBSUQDHPSPVUJOFͷ1$ G
શମ૾ TDIFE SVOR NJEMF QJEMF ( 1 ( (
( ( ( ( 1 . . . 1 1 1 . . ( ( ( SVOR ( ( ( ( ( ( SVOR ( ( ( ( ( (
w HεέδϡʔϥʔͷͨΊͷHPSPVUJOF w DVSHݱࡏ࣮ߦ͍ͯ͠ΔHPSPVUJOF w Q(PͷίʔυΛ࣮ߦ͢ΔͨΊʹඥͮ͘Q 1 M
શମ૾ TDIFE SVOR NJEMF QJEMF ( 1 ( (
( ( ( ( 1 . . . 1 1 1 . . ( ( ( SVOR ( ( ( ( ( ( SVOR ( ( ( ( ( (
w NQ 1 ʹඥͮ͘N . w SVOR1͝ͱʹอ࣋͢ΔH ( ͷMPDBMRVFVF
w HGSFF࣮ߦ͍ͯ͠ͳ͍ར༻ՄೳͳH ( P
શମ૾ TDIFE SVOR NJEMF QJEMF ( 1 ( (
( ( ( ( 1 . . . 1 1 1 . . ( ( ( SVOR ( ( ( ( ( ( SVOR ( ( ( ( ( (
w NJEMFJEMFͷN . Λอ࣋ w QJEMFJEMFͷQ 1 Λอ࣋ w SVOR
H ( Λอ࣋͢ΔHMPCBMRVFVF sched
~goroutineͷϥΠϑλΠϜ~
αϯϓϧίʔυ
newproc . 1 ( SVOR $SFBUFHPSPVUJOF
newproc1 ( . 1 ( SVOR
newproc ( . 1 ( SVOR
runqput ( . 1 ( SVOR (
runqputslow TDIFE . 1 ( SVOR (
globruqputbatch TDIFE . 1 ( SVOR ( (
~goroutineͷεέδϡʔϦϯά~
schedule TDIFE . 1 ( SVOR (
globrunqget TDIFE ( . 1 ( SVOR (
schedule . 1 ( SVOR (
runqget ( . 1 ( SVOR (
schedule . 1 ( SVOR
fi ndrunnable ( *0 ❌ @(XBJUJOH@(SVOOBCMF ( . 1
( SVOR
1 . ( SVOR 1 . ( SVOR (
( ( ( ( ( fi ndrunnable
stealWork/runqsteal 1 . ( SVOR 1 ( SVOR (
( ( ( ( ( ( ( ( .
execute ( . 1 ( SVOR
goexit ( . 1 ( SVOR
goexit1 ( . 1 ( SVOR
mcall ( . 1 ( SVOR
UPHGSFF goexit0 ( . 1 ( SVOR
αϯϓϧίʔυ IUUQTQMBZHPMBOHPSHQX81SL$YO)G
w (PಠࣗͷεέδϡʔϥʔͰHPSPVUJOFΛ੍ޚ͍ͯ͠Δ w ֤1͕SVORΛ࣋ͭ͜ͱͰϓϩάϥϜͷޮ͕ߴ·Δ w ෳࡶͳ࣮ͷ͓͔͛Ͱ؆୯ʹฒߦॲཧΛ࣮Ͱ͖Δ ·ͱΊ
~Tank you for watching~