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
150
TCPサーバ入門
TCPサーバ入門
ryuichi1208
August 02, 2020
Tweet
Share
More Decks by ryuichi1208
See All by ryuichi1208
AI前提のサービス運用について再考する
ryuichi1208
6
1.2k
A Shallow Dive into the World of TCP
ryuichi1208
1
560
入門リトライ
ryuichi1208
19
7.2k
超入門SRE 2025
ryuichi1208
4
1.4k
Goで作って学ぶWebSocket
ryuichi1208
5
3.7k
コード化されていない稼働中のサーバを移設_再構築する技術
ryuichi1208
20
13k
AI前提のサービス運用ってなんだろう?
ryuichi1208
9
1.9k
入門 バックアップ
ryuichi1208
22
10k
効果的なオンコール対応と障害対応
ryuichi1208
9
3.9k
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
48
5.4k
[RailsConf 2023] Rails as a piece of cake
palkan
55
5.6k
The Cost Of JavaScript in 2023
addyosmani
51
8.4k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Mobile First: as difficult as doing things right
swwweet
223
9.7k
VelocityConf: Rendering Performance Case Studies
addyosmani
330
24k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
Thoughts on Productivity
jonyablonski
69
4.7k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
Producing Creativity
orderedlist
PRO
346
40k
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