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.9k
バッチとストリーミング、それぞれの障害に立ち向かう
syucream
3
3.7k
How Scala works at Mercari
syucream
2
1.1k
Production-ready stream data pipeline in Merpay, Inc
syucream
2
13k
データとML周辺エンジニアリン グを考える会 #2 イントロ
syucream
0
630
マイクロサービスにおける ログ収集の課題と取り組み
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
C++20 射影変換
faithandbrave
0
530
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
220
ASP.NETアプリケーションのモダナイズ インフラ編
tomokusaba
1
410
VS Code Update for GitHub Copilot
74th
1
350
AIエージェントはこう育てる - GitHub Copilot Agentとチームの共進化サイクル
koboriakira
0
370
Webの外へ飛び出せ NativePHPが切り拓くPHPの未来
takuyakatsusa
2
360
第9回 情シス転職ミートアップ 株式会社IVRy(アイブリー)の紹介
ivry_presentationmaterials
1
230
プロダクト志向なエンジニアがもう一歩先の価値を目指すために意識したこと
nealle
0
110
A2A プロトコルを試してみる
azukiazusa1
2
1.1k
「ElixirでIoT!!」のこれまでとこれから
takasehideki
0
370
[初登壇@jAZUG]アプリ開発者が気になるGoogleCloud/Azure+wasm/wasi
asaringo
0
130
PHP 8.4の新機能「プロパティフック」から学ぶオブジェクト指向設計とリスコフの置換原則
kentaroutakeda
2
500
Featured
See All Featured
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Making Projects Easy
brettharned
116
6.3k
Stop Working from a Prison Cell
hatefulcrawdad
270
20k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
53k
Visualization
eitanlees
146
16k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
GitHub's CSS Performance
jonrohan
1031
460k
Agile that works and the tools we love
rasmusluckow
329
21k
Why You Should Never Use an ORM
jnunemaker
PRO
56
9.4k
How STYLIGHT went responsive
nonsquared
100
5.6k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.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 ॲཧͷهड़ʹศར ΠϕϯτۦಈɺϓϥοτϑΥʔϜඇґଘͷ هड़ΛӅṭՄೳ ඇಉظॲཧͷهड़ൺֱత༰қ