同步和异步
来源:互联网 发布:java怎么配置环境变量 编辑:程序博客网 时间:2024/06/05 03:53
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
- DWR异步和同步
- 同步和异步
- 同步和异步转换
- 同步和异步
- 同步和异步
- 同步和异步
- 同步和异步学习
- 同步和异步
- 同步和异步
- 同步和异步
- java 同步和异步
- 同步和异步
- 同步和异步
- NSURLRequest 同步和异步
- 同步和异步调用
- 同步和异步
- 同步、异步和并行
- 同步和异步
- 结构体字节对齐问题
- httpclient
- SQL Server建立简单数据库
- 高并发系统限流特技2
- CentOS7 上安装vncserver遇到的问题
- 同步和异步
- 常用正则表达式
- Poj 2375 Cow Ski Area【建图+强连通Kosaraju+缩点染色】
- linux kernel 4.6 移植到imx280手札
- 前端学习_Series2_01.JavaScript_02
- 连接mysql数据库
- 时区日期处理(NSDate, NSCalendar, NSTimeZone)实例详解
- 字符串反转 转换大小写的三种方法
- Android之在window下面开发常用的adb命令(不断更新)