Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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
110
シグナル(Unix)と仲良くなる
ryuichi1208
0
1
AI前提のサービス運用について再考する
ryuichi1208
5
1.3k
A Shallow Dive into the World of TCP
ryuichi1208
1
610
入門リトライ
ryuichi1208
20
7.7k
超入門SRE 2025
ryuichi1208
4
1.4k
Goで作って学ぶWebSocket
ryuichi1208
5
3.9k
コード化されていない稼働中のサーバを移設_再構築する技術
ryuichi1208
20
14k
AI前提のサービス運用ってなんだろう?
ryuichi1208
9
1.9k
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Skip the Path - Find Your Career Trail
mkilby
0
22
Accessibility Awareness
sabderemane
0
14
Producing Creativity
orderedlist
PRO
348
40k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
28
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.3k
How Software Deployment tools have changed in the past 20 years
geshan
0
29k
We Are The Robots
honzajavorek
0
110
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
63
35k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
0
200
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
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