[求教] iOS 有时间间隔的队列 怎么实现性能最好?

2017-05-10 00:31:49 +08:00
 niselover
大量调用最好线程安全的
求大神给点思路
4783 次点击
所在节点    iDev
11 条回复
NUT
2017-05-10 09:04:37 +08:00
什么叫做时间间隔? 定时去调用吗?还是一个执行完阻塞到下一个开始执行?

OC 有两种实现队列的方法,
1.GCD 的线程队列 queue
2.NSOperationQueue

queue 所执行的 task,都是线程安全的, 所以你要处理所执行变量的线程安全。


如果是这样 我觉得你可以用 gcd queue 中 sync 的那种方法来做。
niselover
2017-05-10 11:51:29 +08:00
@NUT 执行完阻塞到下一个开始执行这种情况
你指的是 gcd 的 子线程同步串行队列 是吧?
NUT
2017-05-10 14:26:47 +08:00
@niselover 你的情况,这两个都可以实现。 用 NSOperationQueue 时候需要设置最大的并发是 1,同时需要保证,NSOperation 的 start 或者 run 方法 里面代码块是 同步执行吗,否则会出现回调无法着陆的问题。NSOperationQueue 是 GCD 的封装可以进行某一个异步任务的取消,GCD 就无能为力了。 有机会可以看看 AFNetworking 在 1.*版本的实现。
qinbingchen
2017-05-10 23:42:13 +08:00
问题描述不清楚啊 有时间间隔的....
xi_lin
2017-05-11 13:44:53 +08:00
下一个开始执行的调度机制是啥?
NUT
2017-05-11 17:18:32 +08:00
@xi_lin #5 串行队列,GCD queue 自己调度, 或者自己写一个生产消费模型, 原理可以参考下 JAVA 的 BlockingQueue
xi_lin
2017-05-11 18:30:26 +08:00
@NUT 串行队列或者 BlockingQueue 我没问题,我是不理解 LZ 问题里的时间间隔,说是执行完要阻塞队列到下一个开始执行。这个开始执行的时机不知道是怎么来确定的。
NUT
2017-05-11 18:32:33 +08:00
那你问问楼主。 或者说何必那么纠结呢。
niselover
2017-05-11 23:43:11 +08:00
@qinbingchen
@xi_lin
@NUT
不好意思 没描述清楚
需求是这样的 服务器返回数据 调用方法 执行动画
但是如果返回数据并发太高 上个动画还没执行完下个动画就执行 偶尔会出问题
所以需要在服务器返回数据时加入一个队列 然后间隔一定时间 再执行
请教各位有啥好的方案么
acumen
2017-05-12 08:59:16 +08:00
@niselover 网络请求成功回调的时候才执行动画?
你可以是试试用 DispatchGroup,在网络请求的开始 group.enter() 在动画结束的 closure 里 gourd_leave()。

以上方法没有检验过。这个应用场景类似几个有依赖的网络请求操作啊
xi_lin
2017-05-12 11:21:26 +08:00
@niselover 我整理一下你的需求
1. 从服务器返回数据 R1,R2,R3,返回数据的时机不一定
2. 按返回数据的顺序执行动画
3. 有数据才执行动画,没数据就啥也不做
4. 动画之间需要有时间间隔

如果是这个需求,不如在动画结束和数据到达的时候自己手动调度一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/360258

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX