程序员iOS Developer@IT·互联网

同步与异步、串行与并发

2017-06-21  本文已影响0人  isletn

说到多线程,我们必须明白两个概念:线程与队列。我把线程理解为车间的流水线,而队列则决定了每条流水线的工作方式。我们可以往队列中加入任务,并决定该队列在什么线程执行。

主队列异步执行

    DispatchQueue.main.async {
        print(Thread.current)
        DispatchQueue.main.async {
            print(Thread.current)
            sleep(2)
            print(1)
        }
        print(2)
        DispatchQueue.main.async {
            print(Thread.current)
            print(3)
        }
        sleep(1)
    }
主队列异步执行.png

串行队列异步执行

    let serialQueue = DispatchQueue(label: "serial_queue")
    serialQueue.async {
        print(Thread.current)
        serialQueue.async {
            sleep(2)
            print(Thread.current)
            print(1)
        }
        print(2)
        serialQueue.async {
            print(3)
            print(Thread.current)
        }
        sleep(1)
    }

并发队列异步执行

    let concurrentQueue = DispatchQueue(label: "concurrent_quque", attributes: .concurrent)
    concurrentQueue.async {
        print(Thread.current)
        concurrentQueue.async {
            print(Thread.current)
            sleep(2)
            print(1)
            print(4)
            print(5)
            print(6)
            print(7)
        }
        print(2)
        concurrentQueue.async {
            print(Thread.current)
            print(3)
        }
        sleep(1)
    }

并发队列异步执行.png

结论:

上一篇 下一篇

猜你喜欢

热点阅读