Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
C++とcurlでHTTP通信処理作ってみた
Search
mad_khaki
November 08, 2018
Technology
600
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
C++とcurlでHTTP通信処理作ってみた
mad_khaki
November 08, 2018
Other Decks in Technology
See All in Technology
AI コーディングと人間の認知スループット / CTO Night & Day 2026 Morning Session / AI Coding and Human Cognitive Throughput
prog893
4
1.2k
DBについての基礎説明(MySQL編) - コロプラ 2026年度 新卒研修
colopl
0
120
二歩目のフロントエンド・ウェブアクセシビリティ
camiha
2
650
フィンテック養成勉強会#68
finengine
0
120
DevelopersIO 2026 知識の地図を描く ─ オントロジーとは何か?
ishikawa_satoru
1
1.7k
サブエージェントと Claude Mods で作る独自 Advisor ツールの話
kenichiodo
2
160
S3 Filesで挑む! 八戸せんべい汁の食べ頃問題
usanchuu
0
110
エンタメ企業のM&Aを支えるデータ基盤 ― 統合から店舗のリアルタイム分析まで / Data Engineering Summit 2026
genda
0
190
AI × アーキテクト 第1・2章|生成AIの課題とアーキテクトの素養
daidaidai
0
180
10年後、Engineering 行為を剥奪されるとして、わたしたちは、どう、何を創ればいいだろうか。 / If Engineering Is Taken Away in 10 Years, How and What Should We Create?
bitkey
PRO
1
200
Kiro Crewをはじめよう
kizawa2020
1
160
Metadata - Section 1: HTML Basics
mohab1
0
120
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
1k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
From π to Pie charts
rasagy
1
400
Unsuck your backbone
ammeep
672
58k
Leo the Paperboy
mayatellez
10
2.4k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
520
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Being A Developer After 40
akosma
92
590k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
2
6.3k
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
と組み合わせて圧縮&解凍とか ▸ スレッドの取り扱いには注意 ▸ 設計はシンプルに