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
570
C++とcurlでHTTP通信処理作ってみた
mad_khaki
November 08, 2018
Tweet
Share
Other Decks in Technology
See All in Technology
GitHub Copilot CLI を使いやすくしよう
tsubakimoto_s
0
100
AIが実装する時代、人間は仕様と検証を設計する
gotalab555
1
550
Ruby版 JSXのRuxが気になる
sansantech
PRO
0
170
【Ubie】AIを活用した広告アセット「爆速」生成事例 | AI_Ops_Community_Vol.2
yoshiki_0316
1
120
学生・新卒・ジュニアから目指すSRE
hiroyaonoe
2
770
Red Hat OpenStack Services on OpenShift
tamemiya
0
140
OWASP Top 10:2025 リリースと 少しの日本語化にまつわる裏話
okdt
PRO
3
850
会社紹介資料 / Sansan Company Profile
sansan33
PRO
15
400k
茨城の思い出を振り返る ~CDKのセキュリティを添えて~ / 20260201 Mitsutoshi Matsuo
shift_evolve
PRO
1
420
22nd ACRi Webinar - NTT Kawahara-san's slide
nao_sumikawa
0
110
pool.ntp.orgに ⾃宅サーバーで 参加してみたら...
tanyorg
0
1.2k
Webhook best practices for rock solid and resilient deployments
glaforge
2
310
Featured
See All Featured
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.1k
Facilitating Awesome Meetings
lara
57
6.8k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.2k
Building Adaptive Systems
keathley
44
2.9k
How to build a perfect <img>
jonoalderson
1
4.9k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
55
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
300
sira's awesome portfolio website redesign presentation
elsirapls
0
150
Music & Morning Musume
bryan
47
7.1k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.4k
GraphQLとの向き合い方2022年版
quramy
50
14k
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
と組み合わせて圧縮&解凍とか ▸ スレッドの取り扱いには注意 ▸ 設計はシンプルに