【QA】在GCD中控制并发数
来源:互联网 发布:js 取消严格模式 编辑:程序博客网 时间:2024/04/19 09:08
首先感谢下热心观众,回复了若干个问题,没办法一一解答(有的我也不知道额- -)请见谅。
今天回复下@陈作君同学的提问:
“dispatch_concurrent_queue怎么像nsoperationqueue一样控制其中任务的并发数”
没理解错的话,应该指 NSOperationQueue 中的
maxConcurrentOperationCount 属性,它可以控制最大并发的 operation 数,但 GCD 的并行队列里貌似没有 API 来控制它。
随后我去翻了下,暂时也没找到某个直接的 API 能干这个事,但可以通过信号量的方式实现这个需求。
我们用global queue这个并发的queue做测试,假设有下面的代码:
运行的结果是这样的:
由于GCD内置的最大并发数(也就是它的线程池容量)在64个的样子,所以小于这个数的并发请求都是能同时start的。而且,我们不应该(貌似也不能)去更改GCD对自己线程池的维护方式。所以,若我们想实现并发数为3,可以在block进入queue之前就“拦一下”
上面的代码简单的利用了信号量将通过这个方法执行的block并发数维持在3个,刚才的测试代码换成这个函数后:
运行结果:
在同一时刻就最多有3个线程在干活儿了。希望题主是这个意思- -
刚才这个dispatch_async_limit_3只是测试用,真的要用在工程里的时候还是要注意,dispatch_semaphore_wait方法在等待信号量时是会卡住当前线程的,谁也不想调用它的时候很可能被卡住(尤其是主线程),所以更好的方案是将信号量等待的操作放在另一个串行线程中:
大概就是这样了
0 0
- 【QA】在GCD中控制并发数
- GCD 并发数控制方案
- iOS GCD中如何控制最大并发数
- GCD--信号量控制队列并发数
- GCD信号量控制并发
- ios 多线程控制线程并发数、GCD之dispatch_group、GCD信号量
- iOS GCD最大并发控制
- Shell脚本中并发线程以及并发数的控制
- GCD 信号量控制并发 (dispatch_semaphore)
- GCD 信号量控制并发 (dispatch_semaphore)
- GCD并发线程数量控制技术
- GCD 信号量控制并发 (dispatch_semaphore)
- GCD 信号量控制并发 (dispatch_semaphore)
- GCD 信号量控制并发 (dispatch_semaphore)
- 利用GCD信号量(dispatch_semaphore)控制并发
- iOS --- GCD 信号量控制并发 (dispatch_semaphore)
- hibernate之控制并发访问(乐观并发控制之在hibernate中启用版本控制)
- 控制并发调用接口数
- C/C++复习:学生信息的输出(结构体)
- 【Tip来5发】IB中设置多行文字
- Android开发使用TelephonyManager获得手机相关信息
- ZOJ 3708 Density of Power Network (水题)
- 【Tip来1发】去除Preferred Max Layout Width警告
- 【QA】在GCD中控制并发数
- Android Studio 入门与精通 Gradle 项目配置
- null和NULL和nullptr和””区别
- 【Tip来7发】给@property设置断点
- iOS学习笔记44-Swift(四)枚举和结构体
- Android 反编译
- 【Tip来4发】快速在文件树视图中切换到当前文件
- VS2010中编写x64汇编的具体方法
- 【Tip来2发】快速定位方法调用者