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
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.4k
日本のPHPカンファレンスの歩みと、その辺もろもろ/phpcon_japan_history
koyhoge
0
350
映画を年300本観る技術/watch_300_movies_in_a_year
koyhoge
0
1.3k
Swooleで実装するPHP非同期処理の世界/phpcondo2019-swoole
koyhoge
3
5.9k
CloudFormation と FaaS のはざま - Kubernetes の設計思想を探る -/cf-faas-k8s
koyhoge
0
1.6k
ITイベントマニアから見る技術イベントの動向/techevent
koyhoge
0
340
Other Decks in Programming
See All in Programming
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
110
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
230
モデルのリファクタリングが難しいと思ったら、そもそも複雑だったのはビジネス仕様だった ? / is-the-business-domain-the-real-complexity
hatsu38
0
390
速習iPhone Duo対応
yuukiw00w
1
710
FreeBSDでZabbixを動かす
kenkino
0
320
AWS DevOps Agentで インシデント対応をAIに任せたい
honmarkhunt
7
3.1k
Workers Cache を知る
syumai
0
180
スマート反転とウェブアクセシビリティ
camiha
0
210
フロントエンドUIフレームワークのこれまでとこれから
ssssota
5
2.9k
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
200
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
280
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
300
Featured
See All Featured
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
680
A designer walks into a library…
pauljervisheath
211
25k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
500
A Soul's Torment
seathinner
8
3.6k
The SEO identity crisis: Don't let AI make you average
varn
0
560
How to Think Like a Performance Engineer
csswizardry
28
2.8k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
66k
How to make the Groovebox
asonas
2
2.4k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
600
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
300
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
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