SlideShare ist ein Scribd-Unternehmen logo
1 von 18
Downloaden Sie, um offline zu lesen
並列処理再入門
 主にNSOperationの話




   @_ishkawa
@_ishkawa
  •     新卒プログラマー @面白法人カヤック

  •     Objective-C:1年ちょっと

  •     Twitterクライアントつくった


      GitHub: ishkawa
      Blog: http://blog.ishkawa.org
今日の話

• Grand Central Dispatch
• NSOperation
• 両者をどう使うか
並列処理の大切さ
iOSの並列処理

ちょっと大変          • NSThread
                • Grand Central Dispatch
推奨されている
                • NSOperation
                   - concurrent
                   - non-concurrent


      参考: 並列プログラミングガイド(Apple)
Grand Central
     Dispatch

• 速い / 簡単 / かっこいい
• 並列処理のあれこれが楽にできる
 (排他制御, 逐次実行 など)


• 処理の拡張には向かない
 (関数+Blocksなので)
Grand Central
                   Dispatch
dispatch_queue_t queue =

dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);



dispatch_async(queue, ^{

      // async

      dispatch_async(dispatch_get_main_queue(), ^{

            // callback

      });

});
NSOperation

• 拡張性が高い (オブジェクトなので)
• 複雑な処理をラッピングしやすい
• 内部的にGCDが使われている(iOS4)
NSOperation
                同期

   •NSOperationのmainをオーバーライド
   (NSOperationQueueに入れれば非同期実行されます)




               非同期
•NSOperationのstart, cancelなどをオーバーライド
•いろいろとKVO準拠する
両者の扱い

• GCD           • NSOperation
 関数 + Blocks      オブジェクト

- 準備要らず簡単に扱える    - 準備要るが拡張しやすい

- 例:画像の圧縮など      - 例:前後処理を含めた通信
ここからNSOperationの
 拡張の話になります
例: Twitter API
• 目的:API → NSDictionary
• タスク
 1. HTTPリクエストを組み立てる(OAuth1.0a)
 2. ネットワーク通信
 3. JSONパース


• 問題
 1. 毎回書くのはつらい
 2. 並列処理しないとUXに影響がある
ラッピングしたい

     並列処理            メイン


ネットワーク通信   JSONパース   終了ハンドラ
ラッピングしたい
[ISTwitterOperation

 sendRequestWithMethod:ISHTTPMethodGET

                     path:@”statuses/home_timeline.json”

                params:nil

               handler:^(NSURLRequest *r, id object, NSError *error){

                      if (error) return;

                      self.array = object;

               }];
NSOperationの拡張

• ISNetworkOperation
   (NSURLConnectionを管理してNSDataを返す)


• ISJSONNetworkOperation
   ( + JSONパースしてNSDictionary, NSArrayを返す)


• ISTwitterOperation
   ( APIPath, HTTPMethodからHTTPリクエストを準備(OAuth認証つき))
拡張コード
@implementation ISJSONNetworkOperation

- (id)processData:(NSData *)data

{

    NSError *error = nil;

    id object =

    [NSJSONSerialization JSONObjectWithData:data

                                    options:NSJSONReadingMutableContainers

                                         error:&error];

    if (error)return nil;

    return object;

}
いろいろ拡張できる
    - ISNetworkOperation

        - ISImageNetworkOperation

        - ISXMLNetworkOperation

              - ISHTMLTitleOperation

        - ISJSONNetworkOperation

              - ISTwitterOperation

              - ISFacebookOperation

        - ISPocketOperation

        - ISInstapeperOperation
結論:
拡張性がある並列処理を書くなら
 NSOperationが良さそうです

Weitere ähnliche Inhalte

Was ist angesagt?

Java EE勉強会 開発合宿 成果発表
Java EE勉強会 開発合宿 成果発表Java EE勉強会 開発合宿 成果発表
Java EE勉強会 開発合宿 成果発表Akihiro Harai
 
Zabbix meeting 20101218_02-2 (Takanori Suzuki)
Zabbix meeting 20101218_02-2 (Takanori Suzuki)Zabbix meeting 20101218_02-2 (Takanori Suzuki)
Zabbix meeting 20101218_02-2 (Takanori Suzuki)takanori suzuki
 
お金をかけないDBチューニング
お金をかけないDBチューニングお金をかけないDBチューニング
お金をかけないDBチューニングKazuya Sato
 
Rubyによるお手軽分散処理
Rubyによるお手軽分散処理Rubyによるお手軽分散処理
Rubyによるお手軽分散処理maebashi
 
はじめての datadog
はじめての datadogはじめての datadog
はじめての datadogNaoya Nakazawa
 
WebGLで浮動小数点テクスチャを扱う話
WebGLで浮動小数点テクスチャを扱う話WebGLで浮動小数点テクスチャを扱う話
WebGLで浮動小数点テクスチャを扱う話翔 石井
 
OSvのご紹介 in OSC2014 Tokyo/Fall
OSvのご紹介 in OSC2014 Tokyo/FallOSvのご紹介 in OSC2014 Tokyo/Fall
OSvのご紹介 in OSC2014 Tokyo/FallTakuya ASADA
 
第8回KPF発表資料
第8回KPF発表資料第8回KPF発表資料
第8回KPF発表資料cryks
 
20171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-1020171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-10Toshi Harada
 
Web時代の大富豪的プログラミングのススメ
Web時代の大富豪的プログラミングのススメWeb時代の大富豪的プログラミングのススメ
Web時代の大富豪的プログラミングのススメHideyuki Takeuchi
 
20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsqlToshi Harada
 
20171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-1020171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-10Toshi Harada
 
サーバ構築自動化 On aws sqaleの場合
サーバ構築自動化 On aws   sqaleの場合サーバ構築自動化 On aws   sqaleの場合
サーバ構築自動化 On aws sqaleの場合Ryo Kuroda
 
JavaでインメモリSQLエンジンを作ってみた
JavaでインメモリSQLエンジンを作ってみたJavaでインメモリSQLエンジンを作ってみた
JavaでインメモリSQLエンジンを作ってみたJustSystems Corporation
 
今から始めるDocument db
今から始めるDocument db今から始めるDocument db
今から始めるDocument dbKazunori Hamamoto
 
mongoDB: OSC Tokyo2010 spring
mongoDB: OSC Tokyo2010 springmongoDB: OSC Tokyo2010 spring
mongoDB: OSC Tokyo2010 springichikaway
 
Next-L Enju 開発ワークショップ #10
Next-L Enju 開発ワークショップ #10Next-L Enju 開発ワークショップ #10
Next-L Enju 開発ワークショップ #10Kosuke Tanabe
 
fluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギングfluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギングYuichi Tateno
 

Was ist angesagt? (20)

Java EE勉強会 開発合宿 成果発表
Java EE勉強会 開発合宿 成果発表Java EE勉強会 開発合宿 成果発表
Java EE勉強会 開発合宿 成果発表
 
Zabbix meeting 20101218_02-2 (Takanori Suzuki)
Zabbix meeting 20101218_02-2 (Takanori Suzuki)Zabbix meeting 20101218_02-2 (Takanori Suzuki)
Zabbix meeting 20101218_02-2 (Takanori Suzuki)
 
お金をかけないDBチューニング
お金をかけないDBチューニングお金をかけないDBチューニング
お金をかけないDBチューニング
 
Rubyによるお手軽分散処理
Rubyによるお手軽分散処理Rubyによるお手軽分散処理
Rubyによるお手軽分散処理
 
はじめての datadog
はじめての datadogはじめての datadog
はじめての datadog
 
WebGLで浮動小数点テクスチャを扱う話
WebGLで浮動小数点テクスチャを扱う話WebGLで浮動小数点テクスチャを扱う話
WebGLで浮動小数点テクスチャを扱う話
 
OSvのご紹介 in OSC2014 Tokyo/Fall
OSvのご紹介 in OSC2014 Tokyo/FallOSvのご紹介 in OSC2014 Tokyo/Fall
OSvのご紹介 in OSC2014 Tokyo/Fall
 
第8回KPF発表資料
第8回KPF発表資料第8回KPF発表資料
第8回KPF発表資料
 
20171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-1020171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-10
 
Web時代の大富豪的プログラミングのススメ
Web時代の大富豪的プログラミングのススメWeb時代の大富豪的プログラミングのススメ
Web時代の大富豪的プログラミングのススメ
 
20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql
 
20171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-1020171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-10
 
サーバ構築自動化 On aws sqaleの場合
サーバ構築自動化 On aws   sqaleの場合サーバ構築自動化 On aws   sqaleの場合
サーバ構築自動化 On aws sqaleの場合
 
JavaでインメモリSQLエンジンを作ってみた
JavaでインメモリSQLエンジンを作ってみたJavaでインメモリSQLエンジンを作ってみた
JavaでインメモリSQLエンジンを作ってみた
 
Uguisudani
UguisudaniUguisudani
Uguisudani
 
今から始めるDocument db
今から始めるDocument db今から始めるDocument db
今から始めるDocument db
 
mongoDB: OSC Tokyo2010 spring
mongoDB: OSC Tokyo2010 springmongoDB: OSC Tokyo2010 spring
mongoDB: OSC Tokyo2010 spring
 
Next-L Enju 開発ワークショップ #10
Next-L Enju 開発ワークショップ #10Next-L Enju 開発ワークショップ #10
Next-L Enju 開発ワークショップ #10
 
fluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギングfluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギング
 
MongoDB勉強会資料
MongoDB勉強会資料MongoDB勉強会資料
MongoDB勉強会資料
 

Andere mochten auch

エンジニア戦記 〜小さなチーム、大きな未来〜
エンジニア戦記 〜小さなチーム、大きな未来〜エンジニア戦記 〜小さなチーム、大きな未来〜
エンジニア戦記 〜小さなチーム、大きな未来〜Yuki Hirai
 
WKWebViewとUIWebView
WKWebViewとUIWebViewWKWebViewとUIWebView
WKWebViewとUIWebViewYuki Hirai
 
iOS 通信のパフォーマンス改善 ・ iOSオールスターズ登壇資料
iOS 通信のパフォーマンス改善 ・ iOSオールスターズ登壇資料iOS 通信のパフォーマンス改善 ・ iOSオールスターズ登壇資料
iOS 通信のパフォーマンス改善 ・ iOSオールスターズ登壇資料yohei sugigami
 
let UIWebView as WKWebView
let UIWebView as WKWebViewlet UIWebView as WKWebView
let UIWebView as WKWebViewTaketo Sano
 
WatchKitを実際にさわってみてわかったこと
WatchKitを実際にさわってみてわかったことWatchKitを実際にさわってみてわかったこと
WatchKitを実際にさわってみてわかったことShuichi Tsutsumi
 
効率的なアプリ開発のベストプラクティス
効率的なアプリ開発のベストプラクティス効率的なアプリ開発のベストプラクティス
効率的なアプリ開発のベストプラクティスyayugu
 

Andere mochten auch (6)

エンジニア戦記 〜小さなチーム、大きな未来〜
エンジニア戦記 〜小さなチーム、大きな未来〜エンジニア戦記 〜小さなチーム、大きな未来〜
エンジニア戦記 〜小さなチーム、大きな未来〜
 
WKWebViewとUIWebView
WKWebViewとUIWebViewWKWebViewとUIWebView
WKWebViewとUIWebView
 
iOS 通信のパフォーマンス改善 ・ iOSオールスターズ登壇資料
iOS 通信のパフォーマンス改善 ・ iOSオールスターズ登壇資料iOS 通信のパフォーマンス改善 ・ iOSオールスターズ登壇資料
iOS 通信のパフォーマンス改善 ・ iOSオールスターズ登壇資料
 
let UIWebView as WKWebView
let UIWebView as WKWebViewlet UIWebView as WKWebView
let UIWebView as WKWebView
 
WatchKitを実際にさわってみてわかったこと
WatchKitを実際にさわってみてわかったことWatchKitを実際にさわってみてわかったこと
WatchKitを実際にさわってみてわかったこと
 
効率的なアプリ開発のベストプラクティス
効率的なアプリ開発のベストプラクティス効率的なアプリ開発のベストプラクティス
効率的なアプリ開発のベストプラクティス
 

Ähnlich wie 20120721_ishkawa

軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題Makoto Setoh
 
20120405 setsunaセミナー
20120405 setsunaセミナー20120405 setsunaセミナー
20120405 setsunaセミナーTakahiro Iwase
 
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...Naoya Ito
 
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...Insight Technology, Inc.
 
20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸Takahiro Iwase
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とToru Takahashi
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とToru Takahashi
 
Asakusa バッチの運用を支える技術
Asakusa バッチの運用を支える技術Asakusa バッチの運用を支える技術
Asakusa バッチの運用を支える技術KinebuchiTomo
 
大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話terurou
 
増加するコアを使い切れ!!
増加するコアを使い切れ!!増加するコアを使い切れ!!
増加するコアを使い切れ!!guestc06e54
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Masahiro Nagano
 
IT Pro のための PowerShell スクリプティング
IT Pro のための PowerShell スクリプティングIT Pro のための PowerShell スクリプティング
IT Pro のための PowerShell スクリプティングKazuki Takai
 
Presto As A Service - Treasure DataでのPresto運用事例
Presto As A Service - Treasure DataでのPresto運用事例Presto As A Service - Treasure DataでのPresto運用事例
Presto As A Service - Treasure DataでのPresto運用事例Taro L. Saito
 
WASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみたWASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみたMITSUNARI Shigeo
 
[大図解]ピグライフはこう動いている
[大図解]ピグライフはこう動いている[大図解]ピグライフはこう動いている
[大図解]ピグライフはこう動いているAkihiro Kuwano
 
利用者主体で行う分析のための分析基盤
利用者主体で行う分析のための分析基盤利用者主体で行う分析のための分析基盤
利用者主体で行う分析のための分析基盤Sotaro Kimura
 
実践 Reactive Extensions
実践 Reactive Extensions実践 Reactive Extensions
実践 Reactive ExtensionsShin Ise
 
Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6Toshi Harada
 

Ähnlich wie 20120721_ishkawa (20)

軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
 
20120405 setsunaセミナー
20120405 setsunaセミナー20120405 setsunaセミナー
20120405 setsunaセミナー
 
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
 
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
 
20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 
Asakusa バッチの運用を支える技術
Asakusa バッチの運用を支える技術Asakusa バッチの運用を支える技術
Asakusa バッチの運用を支える技術
 
大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話
 
増加するコアを使い切れ!!
増加するコアを使い切れ!!増加するコアを使い切れ!!
増加するコアを使い切れ!!
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
 
IT Pro のための PowerShell スクリプティング
IT Pro のための PowerShell スクリプティングIT Pro のための PowerShell スクリプティング
IT Pro のための PowerShell スクリプティング
 
Presto As A Service - Treasure DataでのPresto運用事例
Presto As A Service - Treasure DataでのPresto運用事例Presto As A Service - Treasure DataでのPresto運用事例
Presto As A Service - Treasure DataでのPresto運用事例
 
WASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみたWASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみた
 
Zynga
ZyngaZynga
Zynga
 
Aws privte20110406 arai
Aws privte20110406 araiAws privte20110406 arai
Aws privte20110406 arai
 
[大図解]ピグライフはこう動いている
[大図解]ピグライフはこう動いている[大図解]ピグライフはこう動いている
[大図解]ピグライフはこう動いている
 
利用者主体で行う分析のための分析基盤
利用者主体で行う分析のための分析基盤利用者主体で行う分析のための分析基盤
利用者主体で行う分析のための分析基盤
 
実践 Reactive Extensions
実践 Reactive Extensions実践 Reactive Extensions
実践 Reactive Extensions
 
Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6
 

20120721_ishkawa