同步和异步

同步和异步,第1张

概述http://www.jianshu.com/p/0b0d9b1f1f19 同步(sync)和异步(async)的主要区别在于会不会阻塞当前线程,直到Block中的任务执行完毕! 如果是同步(sync) *** 作,它会阻塞当前线程并等待Block中的任务执行完毕,然后当前线程才会继续往下运行。 如果是异步(async) *** 作,当前线程会直接往下执行,它不会阻塞当前线程。 队列:用于存放任务。 一共有两种队

http://www.jianshu.com/p/0b0d9b1f1f19


同步(sync)和异步(async)的主要区别在于会不会阻塞当前线程,直到Block中的任务执行完毕!

如果是同步(sync) *** 作,它会阻塞当前线程并等待Block中的任务执行完毕,然后当前线程才会继续往下运行。

如果是异步(async) *** 作,当前线程会直接往下执行,它不会阻塞当前线程。


队列:用于存放任务。 一共有两种队列,串行队列和并行队列。


串行队列 中的任务会根据队列的定义FIFO的执行,一个接一个的先进先出的进行执行。

更新:放到串行队列的任务,GCD会FIFO(先进先出)地取出来一个,执行一个,然后取下一个,这样一个一个的执行。


并行队列中的任务 根据同步或异步有不同的执行方式。

更新:放到并行队列的任务,GCD也会FIFO的取出来,但不同的是,它取出来一个就会放到别的线程,然后再取出来一个又放到另一个线程。这样由于取的动作很快,忽略不计,看起来,所有的任务都是一起执行的。不过需要注意,GCD会根据系统资源控制并行的数量,所以如果任务很多,它并不会让所有任务同时执行。


同步执行 异步执行
串行队列 当前线程,一个一个执行 其他线程,一个一个执行
并行队列 当前线程,一个一个执行 开很多线程,一起执行



创建队列:

主队列:这是一个特殊的串行队列。什么是主队列,用于刷新UI,任何需要刷新UI的工作都要在主队列执行,所以一般耗时的任务都要放到别的线程执行。


let queue = ispatch_get_main_queue()


自己创建的队列:凡是自己创建的队列都是串行队列。其中第一个参数是标识符,用于DEBUG的时候标识唯一的队列,可以为空。

第二参数用来表示创建的队列是串行还是并行的,传入disPATCH_QUEUE_SERIAL或NulL表示创建串行队列。传入disPATCH_QUEUE_CONCURRENT表示创建并行队列。


//串行队列

let queue = dispatch_queue_create("tk.bourne.testQueue",nil);

let queue = dispatch_queue_create("tk.bourne.testQueue",disPATCH_QUEUE_SERIAL)

//并行队列

let queue = dispatch_queue_create("tk.bourne.testQueue",disPATCH_QUEUE_CONCURRENT)


全局并行队列:这应该是唯一一个并行队列,只要是并行任务一般都加入到这个队列。这是系统提供的一个并发队列。

let queue = dispatch_get_global_queue(disPATCH_QUEUE_PRIORITY_DEFAulT,0)



创建任务

同步任务:会阻塞当前线程(SYNC)

dispatch_sync(<#queue#>,{ () -> VoID in

println(NSThread.currentThread())

})


异步任务:不会阻塞当前线程(ASYNC)

dispatch_async(<#queue#>,{ () -> VoID in

//code here

println(NSThread.currentThread())

})



转自:http://www.jianshu.com/p/0b0d9b1f1f19

总结

以上是内存溢出为你收集整理的同步和异步全部内容,希望文章能够帮你解决同步和异步所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1075224.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存