Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Inside SWOOLE: 非同期処理はどのようにして動くのか/inside_swoole
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
KOYAMA Tetsuji
February 09, 2020
Programming
19k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Inside SWOOLE: 非同期処理はどのようにして動くのか/inside_swoole
KOYAMA Tetsuji
February 09, 2020
More Decks by KOYAMA Tetsuji
See All by KOYAMA Tetsuji
PIE (PHP Installer for Extensions) をみんなで試そう/piseka-pie
koyhoge
0
120
君はPostScriptなウィンドウシステム 「NeWS」をご存知か?/sunnews
koyhoge
0
1k
全日本PHPカンファレンス2024スタンプラリーについて/stamprally-php2024
koyhoge
0
210
日本PHPカンファレンス2024スタンプラリーとその実装/phpcon-stamprally
koyhoge
1
2.5k
日本のPHPカンファレンスの歩みと、その辺もろもろ/phpcon_japan_history
koyhoge
0
350
映画を年300本観る技術/watch_300_movies_in_a_year
koyhoge
0
1.3k
Swooleで実装するPHP非同期処理の世界/phpcondo2019-swoole
koyhoge
3
6k
CloudFormation と FaaS のはざま - Kubernetes の設計思想を探る -/cf-faas-k8s
koyhoge
0
1.6k
ITイベントマニアから見る技術イベントの動向/techevent
koyhoge
0
340
Other Decks in Programming
See All in Programming
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
180
最近”作らせてる” ローカルAIアプリの話
akit37
0
490
Kotlinの15年とServer-Side Kotlin
n_takehata
1
160
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
190
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
5
820
golang-bob.pdf
iwatsukayura
0
130
AmebaブログはKMPから卒業します
kmars0605
0
220
ChromeでローカルLLM
ryu1013
0
160
re:Inventに行く前に知っておきたい現地参加のノウハウ
nokomoro3
0
460
Rでドレミ/Do-Re-Mi_with_R
florets1
0
130
RAG の “R” を Swift で覗いてみる 〜「意味から探す」検索の仕組み〜
nao_randd
0
170
FactoryBotをやめればRSpecは速くなるのか?
yuta_onishi_97
0
1k
Featured
See All Featured
Odyssey Design
rkendrick25
PRO
2
880
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
A Modern Web Designer's Workflow
chriscoyier
699
190k
Un-Boring Meetings
codingconduct
0
460
Technical Leadership for Architectural Decision Making
baasie
3
610
Believing is Seeing
oripsolob
1
250
Reflections from 52 weeks, 52 projects
jeffersonlam
356
22k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
Testing 201, or: Great Expectations
jmmastey
46
8.3k
The SEO identity crisis: Don't let AI make you average
varn
0
590
Transcript
*OTJEF4800-& ඇಉظॲཧͲͷΑ͏ʹͯ͠ ಈ͘ͷ͔ খࢁࢤ !LPZIPHF PHPerKaigi 2020 / 2020-02-09
PHPerKaigi 2020 / 2020-02-09 ࣗݾհ খࢁࢤ ͜·ͯͭ͡ ߹ಉձࣾ΄ٕ͛ݚ Ϣʔβձ͍͔ͭ͘
ຊ6/*9Ϣʔβձ ຊ1PTUHSF42-Ϣʔβձ ຊ1)1Ϣʔβձ SBLVNPגࣜձࣾΤϯδχΞ өըΛ؍Δਓˡ/&8 !LPZIPHF LPZIPHF
PHPerKaigi 2020 / 2020-02-09 1)1ΧϯϑΝϨϯεւಓ ΈΜͳͷ1)1ݱͰཱͭ࠷৽ϊϋ ʮ4XPPMFʹΑΔ1)1ඇಉظॲཧʯ 8&# %#13&44WPM
PHPerKaigi 2020 / 2020-02-09 4XPPMFͱ w1)1ͰඇಉظॲཧΛ࣮ݱ͢Δػೳ֦ு w͔Β։ൃ wݩӳࠃ5SBOTGPOʹΑͬͯ wݱࡏதࠃݍͷ։ൃऀ͕ʹ
PHPerKaigi 2020 / 2020-02-09 ඇಉظॲཧ wฒߦฒྻ wίϧʔνϯ wO݄ؒϥϜμ ϊʔτ WPM
/Pʹৄ͍͠
PHPerKaigi 2020 / 2020-02-09 4XPPMFͷ࣮ݱ๏Λ୳Δ wରຊ ࣌ͷ HJUIVCNBTUFS wW
Ћ
PHPerKaigi 2020 / 2020-02-09 ελʔτ͔͜͜Β go(function() { // something })
PHPerKaigi 2020 / 2020-02-09 HP 473 if (SWOOLE_G(use_shortname)) 474 {
475 SW_FUNCTION_ALIAS(CG(function_table), "swoole_coroutine_create", CG(function_table), "go"); 476 SW_FUNCTION_ALIAS(CG(function_table), "swoole_coroutine_defer", CG(function_table), "defer"); 477 } swoole.cc
PHPerKaigi 2020 / 2020-02-09 TXPPMF@DPSPVUJOF@DSFBUF 931 PHP_FUNCTION(swoole_coroutine_create) 932 { 933
zend_fcall_info fci; 934 zend_fcall_info_cache fci_cache; 935 936 ZEND_PARSE_PARAMETERS_START(1, -1) 937 Z_PARAM_FUNC(fci, fci_cache) 938 Z_PARAM_VARIADIC('*', fci.params, fci.param_count) 939 ZEND_PARSE_PARAMETERS_END_EX(RETURN_FALSE); 940 941 if (sw_unlikely(SWOOLE_G(req_status) == PHP_SWOOLE_CALL_USER_SHUTDOWNFUNC_BEGIN)) swoole_coroutine.cc
PHPerKaigi 2020 / 2020-02-09 951 long cid = PHPCoroutine::create(&fci_cache, fci.param_count,
fci.params); swoole_coroutine.cc
PHPerKaigi 2020 / 2020-02-09 1)1$PSPVUJOFDSFBUF 814 long PHPCoroutine::create(zend_fcall_info_cache *fci_cache, uint32_t
argc, zval *argv) 815 { : 838 php_coro_args php_coro_args; 839 php_coro_args.fci_cache = fci_cache; 840 php_coro_args.argv = argv; 841 php_coro_args.argc = argc; 842 save_task(get_task()); 843 844 return Coroutine::create(main_func, (void*) &php_coro_args); 845 } swoole_coroutine.cc
PHPerKaigi 2020 / 2020-02-09 $PSPVUJOFDSFBUF 121 static inline long create(coroutine_func_t
fn, void* args = nullptr) 122 { 123 return (new Coroutine(fn, args))->run(); 124 } include/coroutine.h
PHPerKaigi 2020 / 2020-02-09 $PSPVUJOF$PSPVUJOF 205 Coroutine(coroutine_func_t fn, void *private_data)
: 206 ctx(stack_size, fn, private_data) 207 { 208 cid = ++last_cid; 209 coroutines[cid] = this; 210 if (sw_unlikely(count() > peak_num)) 211 { 212 peak_num = count(); 213 } 214 } include/coroutine.h
PHPerKaigi 2020 / 2020-02-09 $PSPVUJOFSVO 216 inline long run() 217
{ 218 long cid = this->cid; 219 origin = current; 220 current = this; 221 ctx.swap_in(); 222 check_end(); 223 return cid; 224 } include/coroutine.h
PHPerKaigi 2020 / 2020-02-09 $PSPVUJOFDUY 199 sw_coro_state state = SW_CORO_INIT;
200 long cid; 201 void *task = nullptr; 202 Context ctx; 203 Coroutine *origin; include/coroutine.h
PHPerKaigi 2020 / 2020-02-09 $POUFYUTXBQ@JO 110 bool Context::swap_in() 111 {
112 jump_fcontext(&swap_ctx_, ctx_, (intptr_t) this, true); 113 return true; 114 } src/coroutine/context.cc
PHPerKaigi 2020 / 2020-02-09 KVNQ@GDPOUFYU wTXPPMFTSDʹͳ͍ wCPPTUDPOUFYUͷؔ
PHPerKaigi 2020 / 2020-02-09 CPPTUDPOUFYU •https://github.com/boostorg/ context w$ ͰγϯάϧεϨουϚϧνλεΫ Λ࣮ݱ͢ΔϥΠϒϥϦ
wsetjmp(), longjmp()ͷਐԽ൛
PHPerKaigi 2020 / 2020-02-09 λεΫ͑BTNͰ
PHPerKaigi 2020 / 2020-02-09 ࢀߟਤ w ʲ4XPPMFݯݚڀʳਂೖཧղ4XPPMFླྀఔൌགྷ • https://segmentfault.com/a/1190000019089997
PHPerKaigi 2020 / 2020-02-09 λεΫͲ͏อ࣋͞Ε͍ͯΔ 114 static std::unordered_map<long, Coroutine*> coroutines;
include/coroutine.h
PHPerKaigi 2020 / 2020-02-09 ·ͱΊ w4XPPMFCPPTUDPOUFYUͷλεΫ Λར༻͍ͯ͠Δ wҰݟຐ๏ͷΑ͏ʹݟ͑ͯɺͻͱͭͣ ͭḷ͍ͬͯ͘ͱཧղͰ͖Δ w$
ίϫ͘ͳ͍ΑX