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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
mad_khaki
November 08, 2018
Technology
570
0
Share
C++とcurlでHTTP通信処理作ってみた
mad_khaki
November 08, 2018
Other Decks in Technology
See All in Technology
Data Enabling Team立ち上げました
sansantech
PRO
0
210
Oracle AI Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
5
1.3k
Why we keep our community?
kawaguti
PRO
0
370
Amazon Qはアマコネで頑張っています〜 Amazon Q in Connectについて〜
yama3133
1
170
Move Fast and Break Things: 10 in 20
ramimac
0
120
OpenClawでPM業務を自動化
knishioka
2
370
バックオフィスPJのPjMをコーポレートITが担うとうまくいく3つの理由
yueda256
1
160
Oracle Cloud Infrastructure:2026年3月度サービス・アップデート
oracle4engineer
PRO
0
320
Zephyr(RTOS)でOpenPLCを実装してみた
iotengineer22
0
180
出版記念イベントin大阪「書籍紹介&私がよく使うMCPサーバー3選と社内で安全に活用する方法」
kintotechdev
0
140
【AWS】CloudTrail LakeとCloudWatch Logs Insightsの使い分け方針
tsurunosd
0
130
昔話で振り返るAWSの歩み ~S3誕生から20年、クラウドはどう進化したのか~
nrinetcom
PRO
0
140
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.4k
Making Projects Easy
brettharned
120
6.6k
sira's awesome portfolio website redesign presentation
elsirapls
0
200
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.8k
Building Adaptive Systems
keathley
44
3k
A better future with KSS
kneath
240
18k
Why Our Code Smells
bkeepers
PRO
340
58k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
140
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.3k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
The Limits of Empathy - UXLibs8
cassininazir
1
280
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
と組み合わせて圧縮&解凍とか ▸ スレッドの取り扱いには注意 ▸ 設計はシンプルに