Cocoa関西勉強会#49に参加して,マルチスレッドプログラミングについて話してきました. スライドは以下
本当に伝えたかったこと
- キャンセル必要なら迷わず
NSOperationQueue
を使え - セレクタのことは嫌いになっても
NSOperationQueue
のことは嫌いにならないでください! - Cocoaならマルチスレッドプログラミングは簡単.迷わず進め.
質問について
@ninjinkunからの同期についてのツッコミ
タスクの途中で待って,っていう表現をしましたけど,間違いでした.
task1 task2 task3 WAIT task4 task5 task6
みたいにtask1 -> task4
,task2 -> task5
, task3 -> task6
のような依存関係を持っており,task1-3
の完了を待って,task4-6
を実行する必要があるとき,WAIT
でtask1-3
を単一のqueue
の中で待つということができるという意味でした.これは依存関係だけでは実現できないと思います.
@kanizaさんからのツッコミ
NSOperationQueue
もGCD
みたいにglobalにqueueがあれば便利じゃないかということでしたが,それやっちゃうとNSOperationQueue
がGCD
に勝る優位点である,キャンセルしやすいという点を棄てることになります.なぜなら,雑多なタスクがaddされてしまうと「これはキャンセルしてもいいけど,これはダメ」みたいな状態が発生するからです.queueは目的ごとに分けて生成し,保持するほうがいいでしょう.
言いそびれたこと
マルチスレッドプログラミングについては以下のドキュメントが詳しいです. https://developer.apple.com/library/mac/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40008091-CH1-SW1
Blocks, ARC, GCDについては,エキスパートObjective-Cプログラミングを読むのが一番いいと思います.
エキスパートObjective-Cプログラミング ?iOS/OS Xのメモリ管理とマルチスレッド?
- 作者: 坂本一樹
- 出版社/メーカー: インプレスジャパン
- 発売日: 2011/11/18
- メディア: 単行本(ソフトカバー)
- 購入: 8人 クリック: 343回
- この商品を含むブログ (22件) を見る
ただし,dispatch_sourceについての記述はないので,そこに関してはAppleのドキュメント(上のやつ)とかを適宜参照してください.
どうでもいいこと
発表中に紹介したわりと反響があったエントリはこちらです
最後に
つたない発表でしたが聞いてくださりありがとうございました!大変良い経験になりました! あとHaskell最高なんで,興味あればすごいH本読書会に参加してください!
追記
はてブTいただきました! twitter.com/yashigani/stat…
— チキンとタイカレー (@yashigani) March 30, 2013