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
TCPサーバ入門
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
ryuichi1208
August 02, 2020
170
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
TCPサーバ入門
TCPサーバ入門
ryuichi1208
August 02, 2020
More Decks by ryuichi1208
See All by ryuichi1208
入門 再発防止策
ryuichi1208
17
7k
金曜日デプロイ、するかしないか.pdf
ryuichi1208
1
74
会話で作る信頼性
ryuichi1208
0
180
シグナル(Unix)と仲良くなる
ryuichi1208
1
43
AI前提のサービス運用について再考する
ryuichi1208
6
1.4k
A Shallow Dive into the World of TCP
ryuichi1208
1
670
入門リトライ
ryuichi1208
20
8.3k
超入門SRE 2025
ryuichi1208
4
1.5k
Goで作って学ぶWebSocket
ryuichi1208
5
4.2k
Featured
See All Featured
Designing for Performance
lara
611
70k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
190
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
The Curious Case for Waylosing
cassininazir
1
380
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.3k
Google's AI Overviews - The New Search
badams
0
1k
How to make the Groovebox
asonas
2
2.2k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
200
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
62
54k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
200
Color Theory Basics | Prateek | Gurzu
gurzu
0
360
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Transcript
͍Ζ͍Ζͳ5$1αʔό
5$1Ͱ௨৴͢Δखॱ αʔό • ιέοτΛ࡞Δ(socket) • ଓͪΛ͢ΔIPΞυϨεͱϙʔτΛઃఆ͢Δ • ιέοτʹ໊લΛ͚ͭΔ(bind) • ଓͪ͢Δ(listen)
• ΫϥΠΞϯτ͔ΒͷଓΛड͚͚Δ(accept) • ௨৴Λߦ͏(read/write) ΫϥΠΞϯτ • ιέοτΛ࡞Δ • ଓ૬खΛઃఆ͢Δ • ଓ͢Δ • ௨৴Λߦ͏
ΞʔΩςΫνϟ ϓϩηε ϚϧνϓϩηεϚϧνεϨου 1SFGPSL Πϕϯτۦಈ ϋΠϒϦου
ϓϩηε ΫϥΠΞϯτ αʔό ϓϩηε
ϚϧνϓϩηεϚϧνεϨου ΫϥΠΞϯτ αʔό .BTUFS ϓϩηε
ϚϧνϓϩηεϚϧνεϨου ΫϥΠΞϯτ αʔό .BTUFS ϓϩηε ࢠϓϩηε 'PSL
ϚϧνϓϩηεϚϧνεϨου ΫϥΠΞϯτ αʔό .BTUFS ϓϩηε ࢠϓϩηε 'PSL
1SFGPSL ΫϥΠΞϯτ αʔό .BTUFS ϓϩηε ࢠϓϩηε ࢠϓϩηε ༧ΊGPSL͓ͯ͘͠ ࠷େಉ࣌ଓࢠϓϩηεͷ
1SFGPSL ࠷େಉ࣌ଓࢠϓϩηεͷ ૿ͤ૿͢΄Ͳεϧʔϓοτ্͕Δʁ ݶքͲ͜ʁ
1SFGPSL $, αʔόʔͷϋʔυΣΞੑೳͳ͍ʹ͔͔ΘΒͣɺΫϥΠΞϯτͷಉ࣌ଓ͕ଟ͘ͳΔͱαʔϏεͷԠ͕͘ ͳΔ ίϯςΩετεΠονͷ૿Ճ ϓϩηε͕૿͑͗͢Δͱͦ͏ͳΔɻεϨουͰίετ͍͕ى͜Δ ϨʔείϯσΟγϣϯ εϨουͳΒΫϦςΟΧϧηΫγϣϯͩͬͨΓڞ༗ϝϞϦͰͷΓऔΓͩͬͨΓͰ͔͞Ήίετ ϝϞϦ্ݶϑΝΠϧσΟεΫϦϓλ্ݶ εϨου͋ͨΓͰݻఆͷϝϞϦΛফඅ͢Δ͠ϓϩηε͝ͱʹඞཁͳϝϞϦ͋Δ
ιέοτΛ͏ͷͰϑΝΠϧσΟεΫϦϓλͷ্ݶʹ͋ͨͬͨΓ͢Δ εϩʔΫϥΠΞϯτ DLͱผ ͍ΫϥΠΞϯτ͕͍ͨΒϓϩηεΛઐ༗͞ΕΔ
1SFGPSL $, αʔόʔͷϋʔυΣΞੑೳͳ͍ʹ͔͔ΘΒͣɺΫϥΠΞϯτͷಉ࣌ଓ͕ଟ͘ͳΔͱαʔϏεͷԠ͕͘ ͳΔ ίϯςΩετεΠονͷ૿Ճ ϓϩηε͕૿͑͗͢Δͱͦ͏ͳΔɻεϨουͰίετ͍͕ى͜Δ ϨʔείϯσΟγϣϯ εϨουͳΒΫϦςΟΧϧηΫγϣϯͩͬͨΓڞ༗ϝϞϦͰͷΓऔΓͩͬͨΓͰ͔͞Ήίετ ϝϞϦ্ݶϑΝΠϧσΟεΫϦϓλ্ݶ εϨου͋ͨΓͰݻఆͷϝϞϦΛফඅ͢Δ͠ϓϩηε͝ͱʹඞཁͳϝϞϦ͋Δ
ιέοτΛ͏ͷͰϑΝΠϧσΟεΫϦϓλͷ্ݶʹ͋ͨͬͨΓ͢Δ εϩʔΫϥΠΞϯτ DLͱผ ͍ΫϥΠΞϯτ͕͍ͨΒϓϩηεΛઐ༗͞ΕΔ αʔόϦιʔεۭ͍͍ͯΔͷʹಉ࣌ଓʹݶք͕ʜͲ͏͢ΕΑ͍͔ʜ
Πϕϯτۦಈ
Πϕϯτۦಈ ΫϥΠΞϯτ αʔό ϓϩηε ΫϥΠΞϯτ ΫϥΠΞϯτ ϓϩηεͰෳΫϥΠΞϯτͷΞΫηεΛ͘͞ *0ଟॏԽ
ϓϩηεͱ w ࣮ߦதͷϓϩάϥϜͷΠϝʔδɻػցޠͷϓϩάϥϜ͕ϝϞϦʹಡΈࠐ·Εͯʮϓϩηοα $16 ʯͷ࣮ߦͷରʹͳͬͨͷɻ w ϑΝΠϧͷΞΫηε੍ޚʹ༻͍Δݖݶ ར༻ऀͷࣝผࢠɺར༻ऀͷάϧʔϓͷࣝผࢠ Λ࣋ͭ w
ϓϩηεͷૢ࡞ɺੜɺऴྃɺڧ੍ऴྃɺϓϩάϥϜͷ࣮ߦɺҰ࣌ఀࢭɺ࠶։ɺσόοάͳͲɻ w ̏ͭͷجຊతͳঢ়ଶΛ࣋ͭ w $16ಉ࣌ʹҰͭͷॲཧ͔͠Ͱ͖ͳ͍ ϒϩοΩϯάͱ w ʮ˓˓͍ͯ͠Δ࠷தଞͷॲཧΛ͠ͳ͍ͰͬͯΔΑʙʯͷ͜ͱ w ྫ͑ϓϩηε͕SFBE XSJUF Ͱ௨৴ઌ͔ΒσʔλΛ͍ͬͯΔؒϒϩοΩϯά w ίωΫγϣϯཱ֬ޙɺΫϥΠΞϯτ͔ΒϦΫΤετ͕ૹΒΕͯ͘Δ·Ͱͷػ࣌ؒ w %#֎෦"1*ͷॲཧΛ͍ͯ͠Δ࣌ؒ
Πϕϯτۦಈ ΫϥΠΞϯτ αʔό ϓϩηε εϩʔΫϥΠΞϯτ ΫϥΠΞϯτ SFBE ͪ ॲཧ͞Εͳ͍
ॲཧ͞Εͳ͍ ϓϩηε͕ෳͷίωΫγϣϯΛѻ͏ͱྫ͑ͦΕ͕ϒϩοΫͨ࣌͠Ͱఀࢭ͕શͯࢭ·ͬͯ͠·͏ 0@/0/#-0$,ͱ͔ͰϊϯϒϩοΩϯά͢Δ͜ͱͰ͖Δ͕&"("*/ΛϋϯυϦϯά͢Δͷେม
Πϕϯτۦಈ ΫϥΠΞϯτ αʔό ϓϩηε εϩʔΫϥΠΞϯτ ΫϥΠΞϯτ SFBE ͪ ॲཧ͞Εͳ͍
ॲཧ͞Εͳ͍ ͜͜Ͱొ͢Δͷ͕*0.VMUJQMFYJOH *0ͷଟॏԽ
*0.VMUJQMFYJOHͱ ɾpoll()ɺselect()ɺepollγεςϜίʔϧΛར༻ͯ͠ɺෳͷϑΝΠϧσΟεΫϦϓλΛ1ͭͷϓϩηεͰཧ͢Δ͜ͱ ɾ(epollϑΝΠϧσΟεΫϦϓλͷʹ੍ݶ͕ແ͍ͷʹՃ͑ͯɺϑΝΠϧσΟεΫϦϓλͷঢ়ଶมԽࢹվળ͞Ε͍ͯΔ) ɾepoll_wait(2)Πϕϯτൃੜ·ͰฦΒͳ͍ ɾίϯςΩετεΠονൃੜ͠ͳ͍ ɾΠϕϯτ = ΫϥΠΞϯτ͔ΒͷwriteɺαʔόଆͷSND_BUF͕͍ͬͺ͍ ɾλΠϜΞτͳΜ͔(͜ΕͰ࣮͞Ε͍ͯͨΓ͢Δ) ɾͪͳΈʹrecv(2)ϒϩοΩϯά
ɾσʔλͷ౸ணޙʹϓϩηεʹॲཧ͍ͤͨ͞ͳΒAIOͳͲ͕ඞཁ ɾgoroutineͳΜ͔ཪͰ͜ΕΛ͍ͬͯΔ ɾNode.jsmemcachedlibuvlibevͳͲͰϥοϓͨ͠ϥΠϒϥϦΛ͍ͬͯΔ ΠϕϯτϧʔϓϞσϧMJTUFO͢ΔιέοτFQPMM@XBJU Ͱࢹͯ͠ɺίωΫγϣϯ͕དྷ͔ͨͲ͏͔νΣοΫγͨΓ͢Δඞཁ͋Δ
*0.VMUJQMFYJOHͱ ɾpoll()ɺselect()ɺepollγεςϜίʔϧΛར༻ͯ͠ɺෳͷϑΝΠϧσΟεΫϦϓλΛ1ͭͷϓϩηεͰཧ͢Δ͜ͱ ɾ(epollϑΝΠϧσΟεΫϦϓλͷʹ੍ݶ͕ແ͍ͷʹՃ͑ͯɺϑΝΠϧσΟεΫϦϓλͷঢ়ଶมԽࢹվળ͞Ε͍ͯΔ) ɾಉظ/ඇಉظIO ɾϒϩοΩϯά/ϊϯϒϩοΩϯάIO ɾͦΕͧΕผ ɾҰ൪͍͍ͷඇಉظϊϯϒϩοΩϯά͕࣮͕ͩΑ͘ͳ͍ ɾ(Ϧʔφεౖ͕ܹ͍ͯͨ͠) ɾϗοτͳͷio_uringͱ͍͏LinuxͰඇಉظIOΛ͢ΔͨΊͷAPI ɾ·ͩ·ͩރΕͯͳ͍ͷͰຊ൪ೖ·ͩઌ͔ʁ
* ࢀߟ: Linuxʹ͓͚ΔඇಉظIOͷ࣮ʹ͍ͭͯ https://qiita.com/tmsn/items/0b9e5f84f9fbc56c1c82
Πϕϯτۦಈ ΫϥΠΞϯτ αʔό ϓϩηε ΫϥΠΞϯτ ΫϥΠΞϯτ &QPMM Πϕϯτ͕ൃੜͨ͠ ιέοτΛϓϩηε௨ 04ʹσʔλ͕͖ͨΒ௨͢Δ
Πϕϯτۦಈ ΫϥΠΞϯτ αʔό ϓϩηε εϩʔΫϥΠΞϯτ ΫϥΠΞϯτ &QPMM Πϕϯτ͕ൃੜͨ͠ ιέοτΛϓϩηε௨ ॲཧՄೳ
ॲཧՄೳ SFBE ͳͲͰϒϩοΩϯά
ϋΠϒϦου ΫϥΠΞϯτ αʔό ϓϩηε ΫϥΠΞϯτ ΫϥΠΞϯτ &QPMM ϓϩηε &QPMM .BTUFS
ϓϩηε ΫϥΠΞϯτ 1SFGPSL Πϕϯτۦಈ ϚϧνίΞγγεςϜͳΒઈରʹͬͪ͜Λ͏
Ϛϧνϓϩηε ϚϧνεϨου 1SFGPSL Ϛϧνϓϩηε ϚϧνεϨου "QBDIFIUUQ QSFGPSN UISFBE 4BNCB
BNBWJTE .Z42- 1PTUHSF42- /HJOY "QBDIFIUUQ FWFOU 3FEJT .FNDBDIFE /PEFKT