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
C++とcurlでHTTP通信処理作ってみた
Search
mad_khaki
November 08, 2018
Technology
0
560
C++とcurlでHTTP通信処理作ってみた
mad_khaki
November 08, 2018
Tweet
Share
Other Decks in Technology
See All in Technology
Logik: A Free and Open-source FPGA Toolchain
omasanori
0
230
ピープルウエア x スタートアップ
operando
3
3.6k
2025 DHI Lightning Talks
digitalfellow
0
110
累計5000万DLサービスの裏側 – LINEマンガのKotlinで挑む大規模 Server-side ETLの最適化
ldf_tech
0
200
開発者が知っておきたい複雑さの正体/where-the-complexity-comes-from
hanhan1978
6
1.7k
MCP サーバーの基礎から実践レベルの知識まで
azukiazusa1
24
12k
なぜ新機能リリース翌日にモニタリング可能なのか? 〜リードタイム短縮とリソース問題を「自走」で改善した話〜 / data_summit_findy_Session_2
sansan_randd
1
130
龍昌餃子で理解するWebサーバーの並行処理モデル - 東葛.dev #9
kozy4324
1
130
開発者から見たLLMの進化 202511
ny7760
1
110
Snowflake Marketplaceには”PODB”という便利なオープンデータがあってAI Ready対応してるらしいよ/the-snowflake-marketplace-has-a-useful-open-data-source-called-PODB-that-is-apparently-AI-ready
shinyaa31
0
200
LLM APIを2年間本番運用して苦労した話
ivry_presentationmaterials
11
9.8k
Gov-JAWS4回_某団体でのAmazon Bedrock活用検証で見えた“使う側”の課題精度よりもリテラシー
takuma818t
0
160
Featured
See All Featured
Practical Orchestrator
shlominoach
190
11k
The Cult of Friendly URLs
andyhume
79
6.7k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
650
Build The Right Thing And Hit Your Dates
maggiecrowley
38
2.9k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.7k
Agile that works and the tools we love
rasmusluckow
331
21k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.2k
What's in a price? How to price your products and services
michaelherold
246
12k
Fireside Chat
paigeccino
41
3.7k
Transcript
C++とCURLでHTTP通信処 理作ってみた サポーターズ勉強会
開発の経緯
開発の経緯 ファイルDLシステムの変遷 (初代) HTTP ղౚ HTTP ղౚ メインスレッド
補足 マルチスレッドプログラミング? ▸ スレッド = プログラム実行の主体 ▸ シングルスレッド = 処理を1つずつ逐次実行
▸ マルチスレッド = スレッド毎に処理を並列実行
開発の経緯 ファイルDLシステムの変遷 (二代目) HTTP ղౚ HTTP メインスレッド 解凍もスレッド化
補足 マルチスレッドの利点/欠点 ▸ 【利点】 メインスレッドの処理を止めずに別の処理を実行できる マルチコアを活用してパフォーマンス向上 ▸ 【欠点】 スレッド間の同期/排他制御が必要 馴染みのない人が多い
補足 マルチスレッドのよくある不具合 ▸ デッドロック = ロック解除を互いに待ち合う ▸ レースコンディション = 競合。各スレッドの実行順によっ
て結果が変化する ▸ スタベーション = ロック解放待ちが長すぎて処理が進まな い
開発の経緯 今回の構想(三代目) HTTP ղౚ HTTP ղౚ HTTP ղౚ メインスレッド 並列DL
補足 マルチスレッドの実装で心がけたいこと ▸ Simple is Best ▸ スレッド毎の独立性を高める ▸ 性能を測定しチューニングできるようにする
テキスト 今回の構想を端的に ▸ メイン「Aは◯◯、Bは□□、Cは☓☓からDLして解凍、終 わったら教えて」 ▸ A「わかりました」 ▸ B「わかりました」 ▸
C「わかりました」 ▸ といった感じの実装をする
環境準備
環境準備 curlの導入 (Mac) ▸ Mac, Xcode使用 ▸ コンソールアプリケーション ▸ ライブラリにlibcurlを追加してやれば完了
▸ brew install curl でも可 (コンパイル時に -lcurl)
補足 curl解説 - 初期化
補足 curl解説 - 通信実行
補足 curl解説 - コールバック関数
コード解説
XcodeͰ࣮ࡍʹίʔυݟͤΔ ɾcurlMain
パフォーマンス
パフォーマンス スレッド数と処理時間 3→6ॱͳ৳ͼ͚ͩͲɺ6→9৳ͼΈ ҆ఆ࿏ઢͳΒ3ɺߴ࿏ઢͳΒ5͕ྑ͛͞
発生した問題
発生した問題 OpenSSLのバージョン ▸ https://curl.haxx.se/libcurl/c/threadsafe.html ▸ OpenSSL 1.1.0 "can be safely
used in multi-threaded applications provided that support for the underlying OS threading API is built-in.” ▸ libcurlに含まれているOpenSSLのバージョンが低いと、稀 に curl_easy_perform() でアクセス違反で落ちる
まとめ
まとめ まとめ ▸ libcurl便利 ▸ ハンドラ作っていくつか設定すれば通信できる ▸ API叩いたり、DLしたり活用いろいろ ▸ unzip.h
と組み合わせて圧縮&解凍とか ▸ スレッドの取り扱いには注意 ▸ 設計はシンプルに