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
550
C++とcurlでHTTP通信処理作ってみた
mad_khaki
November 08, 2018
Tweet
Share
Other Decks in Technology
See All in Technology
組織を巻き込む大規模プラットフォーム移行戦略 〜50+サービスのマルチリージョン・マルチプロダクト化で学んだステークホルダー協働の実践〜 / Platform migration strategy engaging all stakeholders
toshi0607
2
350
AlarmKitで実現する 新時代のシステム通知
tsuzuki817
0
210
S3アクセス制御の設計ポイント
tommy0124
3
220
Apache Spark もくもく会
taka_aki
1
160
AIエージェント開発用SDKとローカルLLMをLINE Botと組み合わせてみた / LINEを使ったLT大会 #14
you
PRO
0
140
Bedrock で検索エージェントを再現しようとした話
ny7760
3
170
日本語で指示するだけ!AIで業務効率化を実現する 〜90分で体感する実践ワークショップ〜
taka_aki
0
1.5k
SSG の限界を破る、再ビルド不要なサイト
reyalka
0
160
IoT x エッジAI - リアルタイ ムAI活用のPoCを今すぐ始め る方法 -
niizawat
0
150
中間管理職をなくしたら何が起きたか 〜AI時代の組織変革と3つの失敗〜
staka121
PRO
2
180
iOSDC2025 みてねiOSアプリにおける バックグラウンドアップロード継続の挑戦
hikarusato
0
260
AIがコード書きすぎ問題にはAIで立ち向かえ
jyoshise
11
5.4k
Featured
See All Featured
Music & Morning Musume
bryan
46
6.8k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.6k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
Visualization
eitanlees
148
16k
Bash Introduction
62gerente
615
210k
Code Review Best Practice
trishagee
71
19k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.1k
Statistics for Hackers
jakevdp
799
220k
Docker and Python
trallard
46
3.6k
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
と組み合わせて圧縮&解凍とか ▸ スレッドの取り扱いには注意 ▸ 設計はシンプルに