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
Boost.Asio入門
Search
Ryo Okubo
March 31, 2014
Programming
0
3k
Boost.Asio入門
会社の同期向け勉強会で発表した Boost.Asioの基本的な説明とか自分の気になった部分を調べたまとめ。
Ryo Okubo
March 31, 2014
Tweet
Share
More Decks by Ryo Okubo
See All by Ryo Okubo
UbieのAIパートナーを支えるコンテキストエンジニアリング実践
syucream
3
1.4k
メルカリ・メルペイの成長を支える データ基盤とはどんなものか
syucream
7
7.2k
バッチとストリーミング、それぞれの障害に立ち向かう
syucream
3
3.8k
How Scala works at Mercari
syucream
2
1.1k
Production-ready stream data pipeline in Merpay, Inc
syucream
2
13k
データとML周辺エンジニアリン グを考える会 #2 イントロ
syucream
0
650
マイクロサービスにおける ログ収集の課題と取り組み
syucream
7
2.8k
Stream Data Pipeline for Microservices in Merpay
syucream
6
1.3k
メルペイにおける、マイクロサービスに寄り添うログ収集基盤 / Microservices-frendly Data Pipeline
syucream
0
18k
Other Decks in Programming
See All in Programming
Implementation Patterns
denyspoltorak
0
150
JETLS.jl ─ A New Language Server for Julia
abap34
2
480
AI時代を生き抜く 新卒エンジニアの生きる道
coconala_engineer
1
530
AIによるイベントストーミング図からのコード生成 / AI-powered code generation from Event Storming diagrams
nrslib
2
1.3k
TestingOsaka6_Ozono
o3
0
270
はじめてのカスタムエージェント【GitHub Copilot Agent Mode編】
satoshi256kbyte
0
160
AgentCoreとHuman in the Loop
har1101
4
150
生成AIを利用するだけでなく、投資できる組織へ
pospome
2
440
[AI Engineering Summit Tokyo 2025] LLMは計画業務のゲームチェンジャーか? 最適化業務における活⽤の可能性と限界
terryu16
2
310
組み合わせ爆発にのまれない - 責務分割 x テスト
halhorn
1
190
The Art of Re-Architecture - Droidcon India 2025
siddroid
0
160
[AtCoder Conference 2025] LLMを使った業務AHCの上⼿な解き⽅
terryu16
6
1k
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.3k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
190
Believing is Seeing
oripsolob
1
29
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Facilitating Awesome Meetings
lara
57
6.7k
Fireside Chat
paigeccino
41
3.8k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
150
Become a Pro
speakerdeck
PRO
31
5.8k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
0
1.1k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
Transcript
Boost.Asio ೖ @syu_cream
ΞδΣϯμ Boost.Asio ͷհ جຊతͳಛ ΠϕϯτۦಈͱBoost.Asio εϨουͱBoost.Asio ίϧʔνϯͱBoost.Asio (༨༟͕͋Ε)αϯϓϧίʔυಡΈ (ߋʹ༨༟͕͋Ε)झຯͰॻ͍͍ͯΔ HTTP/2
؆қ࣮ʹ͍ͭͯ
Boost.Asio ͱ Boost ͷඇಉظωοτϫʔΫ௨৴ϥΠϒϥϦ ΠϕϯτۦಈI/Oͷαϙʔτ ϓϥοτϑΥʔϜͷࠩҟΛٵऩͯ͘͠ΕΔ ಉظ௨৴αϙʔτ
Asio Ͱαϙʔτ͢Δ௨৴ αϙʔτ͢Δϓϩτίϧͷछྨ TCP/UDP/ICMP ιέοτ γϦΞϧϙʔτ UNIX Domain Socket
Πϕϯτۦಈͱ Boost.Asio
Πϕϯτۦಈ I/O ಉ࣌ʹෳͷ I/O Λॲཧ͢ΔϞσϧ I/OͷྃΛݕग़͢ΔΠϕϯτϧʔϓΛ࣋ͭ I/Oྃ࣌ʹΠϕϯτϋϯυϥΛ࣮ߦ͢Δ ! " !!
!! !! ①"I/O" ! ! " ②"I/O"" !! ③!! "
Proactor pattern ΠϕϯτۦಈI/OΛ࣮ݱ͢ΔσβΠϯύλʔϯͷҰछ Πϕϯτϧʔϓͱϋϯυϥͷ࣮Λ લऀOSͷػೳ(select, poll, epoll/kqueueͳͲ)Λར༻ ޙऀࣗલͰ࣮ɻඞཁͳΒεϨουͰฒྻॲཧɻ
Boost.Asio ʹ͓͚Δ Proactor io_service ΦϒδΣΫτΛհͯ͠ I/O Λॲཧ͢Δ $:@.>< 8A7> I/O$+91*-6$
(:$3/46) io_service +;?B5)A.025< ①$I/O+9 1*-6 ② 8A7> " ③io_service$(run() !( ④$I/O$ ( ⑤$I/O % ,=B#'& io_service$'( ⑥I/O$( 8A7>#&$
io_service Boost.Asio ͷ௨৴ͷཁͱͳΔΦϒδΣΫτ Πϕϯτϧʔϓͷ࣮ߦ εϨουϓʔϧͷཧ OS ͷΠϕϯτ௨ػߏΛݺͼग़͠ ྃϋϯυϥͷݺͼग़͠
io_service ͷૢ࡞ io_service::run() ΠϕϯτॲཧϧʔϓΛϒϩοΩϯά࣮ͯ͠ߦ io_service::poll() ΠϕϯτॲཧϧʔϓΛϒϩοΩϯάͤͣʹ࣮ߦ io_service::post() Ωϡʔʹॲཧ͖͢ϋϯυϥΛՃ io_service::dispatch() ʢՄೳͰ͋Εʣͨ͠ϋϯυϥΛଈ࠲ʹ࣮ߦ
Asio ʹΑΔඇಉظTCP௨৴ boost::asio::ip::tcp::socket TCPιέοτΛදݱ͢Δ I/O ΦϒδΣΫτ boost::asio::async_connect ඇಉظʹ connect ͢Δ
boost::asio::ip::tcp::socket::async_accept ඇಉظʹ accept ͢Δ boost::asio::async_(read | write) ඇಉظʹ read/write ͢Δ
εϨουͱ Boost.Asio
εϨουͱͷؔ εϨουϓʔϧ ྃϋϯυϥͷॲཧΛ؆୯ʹϚϧνεϨουԽՄೳ io_service::run() ΛෳεϨου͔Βݺͼग़͢ͱε Ϩουϓʔϧ͕ߏங͞ΕΔ ෦εϨου ϗετ໊ղܾͳͲϥΠϒϥϦͰฒྻԽ͞ΕΔ
ίϧʔνϯͱ Boost.Asio
ྃϋϯυϥͷ࣮1: ී௨ʹίʔϧόοΫؔΛఆٛ ఆ൪ͷྃϋϯυϥͷॻ͖ํ ͨͩ͠ίʔυͷݟ௨͠ѱ͘ͳΔɻ
ྃϋϯυϥͷ࣮2: ແ໊ؔΛ͏ ؔ࿈͢Δॲཧͷهड़ΛूͰ͖Δ ͔͠͠ɺωετ͕ਂ͘ͳΔɻ
ྃॲཧͱίϧʔνϯ ௨৴ॲཧஞ࣍తʹهड़ग़དྷͨํ͕ײత ෳճͷରΛཁ͢Δϓϩτίϧ͠ΌΔ߹ͳͲ ॲཧ͕ෳࡶʹͳΔͱίʔϧόοΫࠈʹؕΔ ! Boost 1.53 ͔ΒBoost.Coroutine Λαϙʔτʂ ஞ࣍ॲཧͬΆ͘ඇಉظ௨৴ॲཧ͕هड़Ͱ͖Δ
ྃϋϯυϥͷ࣮3: ελοΫϨείϧʔνϯ Boost.Coroutine Λͬͯஞ࣍ॲཧతʹهड़ reenter() ʹίϧʔνϯͰ࣮ߦ͢ΔॲཧΛهड़ I/O ͢Δࡍ yield ͰίϯςΩετΛ”ৡΔ”
reenter() ֎ʢؔݺͼग़͠ઌͳͲʣͰ yield Ͱ͖ͳ͍͜ͱʹҙ
ྃϋϯυϥͷ࣮4: ελοΫϑϧίϧʔνϯ boost::asio::spawn() ʹίϧʔνϯΛ͚ͩ͢ Boost.Coroutine ͷهड़Λҙࣝ͠ͳͯ͘ྑ͘ͳΔ ελοΫϨείϧʔνϯͱҧ͍ɺݺͼग़͠ઌͷؔͰ yield Մೳ yield_context
Λൖ͢Δඞཁ͋Δ
·ͱΊ Boost.Asio ඇಉظ I/O ॲཧͷهड़ʹศར ΠϕϯτۦಈɺϓϥοτϑΥʔϜඇґଘͷ هड़ΛӅṭՄೳ ඇಉظॲཧͷهड़ൺֱత༰қ