Swift 多线程、为什么几乎所有的gui 都是单【主】线程的

https://community.oracle.com/blogs/kgh/2004/10/19/multithreaded-toolkits-failed-dream

大概就意思就是。。如果是多线程渲染。虽然速度很快,但是问题会出现很多

 

那么多线程可以做什么?

网络请求 ,io,计算,数据模型转换等等

如图,上面是理想多线程与下面是现实多线程

Swift 多线程、为什么几乎所有的gui 都是单【主】线程的_第1张图片

多线程

Thread 最原始,裸露

Cocoa Operation(Operation 和OperationQueue) 封装最好

Grand Central Dispath(GCD)  中间  封装没那么好。但是效率最高。

 

Thread 在三种多线程技术是最轻量级的,但是需要自己管理线程的声明周期和线程同步。线程同步对数据的加锁会有一定的系统开销

 

快捷方式创建

datachNewThread(_ block:@escaping()->Void)

datachNewThreadSelector(_ selector:Selector,toTarget target:Any,with argument:Any?)


import UIKit
import PlaygroundSupport
//不希望主线程执行完毕就结束
PlaygroundPage.current.needsIndefiniteExecution = true
for i in 0...10{
    Thread.detachNewThread {
        print(i)
    }
}

结果

0
1
6
8
4
9
3
10
7
2
5
//: FROM  https://www.anuomob.com

import UIKit
import PlaygroundSupport
//不希望主线程执行完毕就结束
PlaygroundPage.current.needsIndefiniteExecution = true
class ObjectForThread{
    func threadTest(){
        let thread = Thread(target: self, selector: #selector(threadWorker), object: nil)
        thread.start()
        print("threadTest")
    }
    
    @objc func threadWorker(){
        print("threadWorker")
    }
}

let obj = ObjectForThread()
obj.threadTest()

结果

threadTest
threadWorker

 

你可能感兴趣的:(#,swift)