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
メルカリ・メルペイの成長を支える データ基盤とはどんなものか
syucream
7
6.8k
バッチとストリーミング、それぞれの障害に立ち向かう
syucream
3
3.6k
How Scala works at Mercari
syucream
2
1k
Production-ready stream data pipeline in Merpay, Inc
syucream
2
13k
データとML周辺エンジニアリン グを考える会 #2 イントロ
syucream
0
620
マイクロサービスにおける ログ収集の課題と取り組み
syucream
7
2.7k
Stream Data Pipeline for Microservices in Merpay
syucream
6
1.2k
メルペイにおける、マイクロサービスに寄り添うログ収集基盤 / Microservices-frendly Data Pipeline
syucream
0
18k
Merpay のデータ収集基盤
syucream
5
1.1k
Other Decks in Programming
See All in Programming
爆速スッキリ! Rspack 移行の成果と道のり - Muddy Web #11
dora1998
1
160
ローコードサービスの進化のためのモノレポ移行
taro28
1
340
複雑なフォームと複雑な状態管理にどう向き合うか / #newt_techtalk vol. 15
izumin5210
4
3.4k
2025/3/18 サービスの成長で生じる幅広いパフォーマンスの問題を、 AIで手軽に解決する
shirahama_x
0
160
フロントエンドテストの育て方
quramy
11
2.6k
Boost Your Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
250
eBPF Updates (March 2025)
kentatada
0
130
英語文法から学ぶ、クリーンな設計の秘訣
newnomad
1
270
List とは何か? / PHPerKaigi 2025
meihei3
0
560
Agentic Applications with Symfony
el_stoffel
1
110
自分のために作ったアプリが、グローバルに使われるまで / Indie App Development Lunch LT
pixyzehn
1
130
AtCoder Heuristic First-step Vol.1 講義スライド(山登り法・焼きなまし法編)
takumi152
3
990
Featured
See All Featured
Practical Orchestrator
shlominoach
187
10k
Building Adaptive Systems
keathley
41
2.5k
Building an army of robots
kneath
304
45k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Stop Working from a Prison Cell
hatefulcrawdad
268
20k
Documentation Writing (for coders)
carmenintech
69
4.7k
Facilitating Awesome Meetings
lara
53
6.3k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
12
1.4k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
22
2.6k
Reflections from 52 weeks, 52 projects
jeffersonlam
349
20k
Making Projects Easy
brettharned
116
6.1k
Into the Great Unknown - MozCon
thekraken
36
1.7k
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 ॲཧͷهड़ʹศར ΠϕϯτۦಈɺϓϥοτϑΥʔϜඇґଘͷ هड़ΛӅṭՄೳ ඇಉظॲཧͷهड़ൺֱత༰қ