美文网首页待阅读的文章多线程iOS 面试
iOS 多线程开发GCD如何控制最大并发数

iOS 多线程开发GCD如何控制最大并发数

作者: 1条大菜狗 | 来源:发表于2016-04-24 23:02 被阅读3367次

    我们做iOS开发的时候,使用GCD控制同一条线程中的最大并发数,不可能是一直往同一条线程中塞。这个时候就用到的GCD中的信号量控制机制--dispatch_semaphore_create。

创建信号量的方式:

(1)dispatch_semaphore_creat SignalCount = dispatch_semaphore_creat(10).

这个地方后面的这个10,是一个整数,可以是1,2,3,。。。表示在信号等待的时候,下一次收到的的信号量,说白了,就是这个数字控制的最大并发数。

(2)dispatch_semaphore_signal( ),这是一句表示信号通知。表示在信号等待的时候,收到的下一个信号量。一般是一个“信号量对象”。

(3)dispatch_semaphore_wait(参数一,参数二 ),这一句表示信号等待。

一般参数一会放一个信号对象,就是我们建立的那个,如果这个对列的信号量小于0的时候,就会一直等待下去。

参数二的值一般是 DISPATCH_TIME_FOREVER 和 DISPATCH_TIME_NOW

下面我们写一段代码来说明一下。(注:当然是参考别人的)


这个地方,解释一下,新建一个信号量为10的对象,就是将队列的最大并发数控制在10。

第一次打印的结果是 0,1,2,3,4,5,6,7,8,9。十个数字。

最关键的是dispatch_semaphore_signal(semphore),如果打印完第一轮十个数字,不再进行信号通知的话,线程就永远阻塞下去咯。剩下的10~99就不会再打印下去。

(注:以上是看了一个大神地思路以后,自己摆弄了一下,然后给大家解释一下,感谢那位大神,有些公司去面试的时候,会问NSOperation这个类通过调用setMaxConcurrentOperationCount这个方法设置最大的并发数,多线程技术GCD可以吗?答案是可以的,还有之前看过另外一个大神的,通过信号量控制,将异步的线程变成同步线程的,有兴趣的同学可以去参阅以下)。

相关文章

  • iOS多线程控制最大并发数

    iOS多线程最常用是GCD和NSOperation。一般简单的异步任务直接使用GCD,需要控制最大并发数和控制状态...

  • iOS开发多线程之GCD

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 GCD...

  • iOS 多线程开发GCD如何控制最大并发数

    我们做iOS开发的时候,使用GCD控制同一条线程中的最大并发数,不可能是一直往同一条线程中塞。这个时候就用到的...

  • iOS实录16:GCD小结之控制最大并发数

    导语:在GCD的使用中,需要考虑控制最大并发数 和 线程同步这两个问题,本文主要介绍GCD中如何控制最大并发数 。...

  • iOS开发之GCD并发队列

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 03 ...

  • iOS开发之GCD同步任务加强

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 004...

  • iOS开发之GCD串行队列

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 实例d...

  • iOS实录:GCD使用小结(二)

    2017-07-29iOS开发 导语:在GCD的使用中,需要考虑控制最大并发数 和 线程同步这两个问题,本文主要介...

  • 关于GCD的使用

    在iOS开发中,对于多线程,大多数开发者使用苹果提供的简单的GCD, 频繁的使用GCD,并发队列并不会去管理最大并...

  • GCD 文章理解

    GCD详解 1,GCD如何控制线程的最大并发数? (1,通过信号量的大小控制线成并发执行的数量) (2,一定数量的...

网友评论

    本文标题:iOS 多线程开发GCD如何控制最大并发数

    本文链接:https://www.haomeiwen.com/subject/vrvfrttx.html