iOS多线程并发,串行,同步,异步

来源:互联网 发布:java二分法查找 编辑:程序博客网 时间:2024/05/17 04:37

          好久没写过博客,回顾之前还是编程初期的那几篇,不想多年之后在iOS圈子里悄悄的来,又悄悄的走.所以又捡起博客,以后会定期分享自己的学习心得.

          废话不多说,上今天的菜

          我们先讲几个概念,也是面试会经常问到的.

  • 同步线程:同步线程会阻塞当前线程去执行线程内的任务,执行完之后才会反回当前线程。
  • 异步线程:异步线程不会阻塞当前线程,会开启其他线程去执行线程内的任务。
  • 串行队列:线程任务按先后顺序逐个执行(需要等待队列里面前面的任务执行完之后再执行新的任务)。
  • 并发队列:多个任务按添加顺序一起开始执行(不用等待前面的任务执行完再执行新的任务),但是添加间隔往往忽略不计,所以看着像是一起执行的。
  • 并发VS并行:并行是基于多核设备的,并行一定是并发,并发不一定是并行
理解了这几个概念就下面的几种情况思考下就会明白了....那么下面的问题是,描述下

1.并行队列异步执行    2.并发队列同步执行    3.串行队列异步执行    4.串行队列同步执行







-------------------------------------------------- 分割线 --------------------------------------------------

下面就公布答案

  • 并发队列异步执行: 这些任务都是在创完之后才执行的,异步线程的执行顺序是不确定的,几乎同步开始执行..异步+并行,可以新建线程,各线程也是并发执行的.

  • 并发队列同步执行: 这些任务都是创建一个就立马执行,执行完才创建下一个,因为是同步函数,所以不新建线程,只要是同步执行,就不会新建线程.并发队列与否,并不影响同步线程的创建,因为本身就不能创建多线程,也就不存在并发
  • 串行队列异步执行: 这个搭配可以新建线程,但是因为是串行队列,实际上也只是开了一个新线程,做完一个任务,在做另外一个任务

  • 串行队列同步执行: 既不会开新线程,也是串行的(不会开新线程,还在主线程执行)

具体到代码层面来看这篇文章

http://www.jianshu.com/p/ae786a4cf3b1



0 0