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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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.3k
バッチとストリーミング、それぞれの障害に立ち向かう
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
670
マイクロサービスにおける ログ収集の課題と取り組み
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
へんな働き方
yusukebe
3
2.1k
最初からAWS CDKで技術検証してもいいんじゃない?
akihisaikeda
4
160
メタプログラミングで実現する「コードを仕様にする」仕組み/nikkei-tech-talk43
nikkei_engineer_recruiting
0
190
ベクトル検索のフィルタを用いた機械学習モデルとの統合 / python-meetup-fukuoka-06-vector-attr
monochromegane
2
470
Symfony + NelmioApiDocBundle を使った スキーマ駆動開発 / Schema Driven Development with NelmioApiDocBundle
okashoi
0
160
どんと来い、データベース信頼性エンジニアリング / Introduction to DBRE
nnaka2992
1
300
Agentic AI: Evolution oder Revolution
mobilelarson
PRO
0
190
GoのDB アクセスにおける 「型安全」と「柔軟性」の両立 - Bob という選択肢
tak848
0
210
CDIの誤解しがちな仕様とその対処TIPS
futokiyo
0
220
AWS Infrastructure as Code の新機能 2025 総まとめ 〜SA 4人による怒涛のデモ祭り〜
konokenj
10
3.4k
CS教育のDX AIによる育成の効率化
niftycorp
PRO
0
140
AI時代のソフトウェア開発でも「人が仕様を書く」から始めよう-医療IT現場での実践とこれから
koukimiura
0
150
Featured
See All Featured
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
How STYLIGHT went responsive
nonsquared
100
6k
Code Review Best Practice
trishagee
74
20k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
92
Writing Fast Ruby
sferik
630
63k
The Curious Case for Waylosing
cassininazir
0
270
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
1.9k
ラッコキーワード サービス紹介資料
rakko
1
2.7M
WCS-LA-2024
lcolladotor
0
480
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.1k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.5k
Discover your Explorer Soul
emna__ayadi
2
1.1k
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 ॲཧͷهड़ʹศར ΠϕϯτۦಈɺϓϥοτϑΥʔϜඇґଘͷ هड़ΛӅṭՄೳ ඇಉظॲཧͷهड़ൺֱత༰қ