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
ryuichi1208
August 02, 2020
0
160
TCPサーバ入門
TCPサーバ入門
ryuichi1208
August 02, 2020
Tweet
Share
More Decks by ryuichi1208
See All by ryuichi1208
会話で作る信頼性
ryuichi1208
0
130
シグナル(Unix)と仲良くなる
ryuichi1208
0
16
AI前提のサービス運用について再考する
ryuichi1208
6
1.4k
A Shallow Dive into the World of TCP
ryuichi1208
1
630
入門リトライ
ryuichi1208
20
7.9k
超入門SRE 2025
ryuichi1208
4
1.5k
Goで作って学ぶWebSocket
ryuichi1208
5
4k
コード化されていない稼働中のサーバを移設_再構築する技術
ryuichi1208
20
15k
AI前提のサービス運用ってなんだろう?
ryuichi1208
9
1.9k
Featured
See All Featured
Google's AI Overviews - The New Search
badams
0
910
Design in an AI World
tapps
0
140
Git: the NoSQL Database
bkeepers
PRO
432
66k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Art, The Web, and Tiny UX
lynnandtonic
304
21k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.1k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
3k
Designing Experiences People Love
moore
144
24k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
210
Scaling GitHub
holman
464
140k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Odyssey Design
rkendrick25
PRO
1
490
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