11月10日
10日記念日と誕生日の祝いが済んだし、これから新たな目標(現金1000万)の為に努力を尽くしたいと思う。今朝5時早起きし、勉強に没頭していた。
マルチスレッドプログラミング
GCD (Grand Central Dispatch) は自動的にマルチスレッドの生命周期を管理する。ただ因んだ方法を呼び出していいから。重要な概念二つここで書き留め:任務と行列。任務というのはBlock(closure)の形で作成されて、同時(sync)あるいは非同時(async)的な実行の区別は目前のスレッドをブロックするかどうかだ。
関数実行
let queue: dispatch_queue_t =
dispatch_asyn(queue) { /閉鎖 Closure/ }
メインキュー (シリアル)
let mainQ: dispatch_queue_t = dispatch_get_main_queue()
let mainQ: NSOperationQueue = NSOperationQueue.mainQueue()
dispatch_asyn(notTheMainQueue) {
// something might be block or takes a while
dispatch_asyn(dispatch_get_main_queue()) {
// call UI functions with the result of the above
}
}
他の(同時・コンカレント)キュー
QOS_CLASS_USER_INTERACTIVE //高優先度、瞬時完成できる
QOS_CLASS_USER_INITIATED //高優先度、時間がかかる
QOS_CLASS_UTILITY //長時間の実行
QOS_CLASS_BACKGROUND //ユーザに知らせる必要無し
let qos = Int(
let queue = dispatch_get_global_queue(qos, 0)
自分の行列を創る
let serialQ = dispatch_queue_create(“name”, DISPATCH_QUEUE_SERIAL) // DISPATCH_QUEUE_CONCURRENT 並行行列
NSThread Class
let thread = NSThread(target: self, selector: “run:”, object: nil) //作成
thread.start()
NSThread.detachNewThreadSelector(“run:”, toTarget: self, withObject: nil)
NSOperationとNSOperationQueueはそれぞれ任務と行列に対応する。
NSInvocationOperationと(Swift には存在しない)
NSBlockOperationはNSOperationのサブクラス。
応用編
1.相互排他 Exclusion mutuelle 同じ時間帯に指定されたスレッドだけがコードにアクセスできることを保証する。
objc_sync_enter(self)
// コード実行
objc_sync_exit(self)
2.スレッド同期 実行したいスレッドを同じシリアル行列に入れるだけでスレッド同期を実現する
3.行列遅延
let delayInSeconds = 25.0
let delay = Int64(delayInSeconds Double(NSEC_PER_MSEC))
let dispatchTime = dispatch_time(DISPATCH_TIME_NOW, delay)
dispatch_after(dispatchTime, dispatch_get_main_queue()) { /do something on the main queue 25s from now*/ }