GCD中的apply

2017-05-22  本文已影响56人  developer_cp3

1.dispatch_apply函数作用:把一项任务提交到队列中多次执行,具体是串行执行还是并行执行由队列本身决定

注意:dispatch_apply不会立即返回,在执行完毕后才会返回,是同步的调用

size_t iterations: 执行的次数

dispatch_queue_t queue: 提交的队列

block 执行的任务

size_t block中每次任务执行的索引

如果在for循环中使用dispatch_async, 需要管理好线程的数量,否则会发生线程爆炸或死锁。

而且我们看到,其实很多操作都是在一个线程执行的,因为这个线程事情执行完了,空出来了,那么其他时间就有可能调用这个线程做一些事情这个时候我们调用,就会有一些预料不到的情况(虽然我还没遇到)。

这种情况下,系统会自己分配资源,管理队列,及队列里面执行事件的线程,更加安全,效率也会更高(肯定也会出现一些线程执行完一件事情,空下来待会儿执行队列里面的其他事件)。

如果我们 将DISPATCH_QUEUE_CONCURRENT 改成DISPATCH_QUEUE_SERIAL ,会发现,变成了串行执行,不同的是,事件顺序执行,而且都在一个线程(串行的嘛)。

我们后面的log,和barrier都是在执行所有的apply 之后执行的,这是个阻塞的工作。我们想并发,可以将整个apply放到一个队列,异步的执行。

上一篇 下一篇

猜你喜欢

热点阅读