如何以编程方式控制和平衡iOS应用程序正在执行的多个线程?

如何以编程方式控制和平衡iOS应用程序正在执行的多个线程?,第1张

概述如何控制和平衡我的应用程序正在执行的线程数,如何限制其数量以避免应用程序阻塞,因为达到了线程限制? 在SO上我看到了以下可能的答案:“主并发队列(dispatch_get_global_queue)自动管理线程数”,由于以下原因,我不喜欢这样做: 考虑以下模式(在我的真实应用程序中,有更简单和更复杂的示例): dispatch_queue_t defaultBackgroundQueue() { 如何控制和平衡我的应用程序正在执行的线程数,如何限制其数量以避免应用程序阻塞,因为达到了线程限制?

在SO上我看到了以下可能的答案:“主并发队列(dispatch_get_global_queue)自动管理线程数”,由于以下原因,我不喜欢这样做:

考虑以下模式(在我的真实应用程序中,有更简单和更复杂的示例):

dispatch_queue_t defaultBackgroundQueue() {    return dispatch_get_global_queue(disPATCH_QUEUE_PRIORITY_DEFAulT,0);}dispatch_queue_t databaseQueue() {    dispatch_queue_create("Database private queue",0);}dispatch_async(defaultBackgroundQueue(),^{    [AFNetworkingAsynchronousRequestWithCompletionHandler:^(data){        dispatch_async(databaseQueue(),^{            // data is about 100-200 elements to parse            for (el in data) {            }            maybe more AFNetworking requests and/or processing in other queues or            dispatch_async(dispatch_get_main_queue(),^{                // At last! We can do something on UI.            });        });    }];});

这种设计经常导致以下情况:

>由于达到了线程限制,应用程序被锁定(类似于> 64)
>较慢且因此较窄的队列可能会被大量待处理作业所淹没.
>第二个也会产生取消问题 – 如果我们有100个作业已经等待在串行队列中执行,我们就无法立即取消它们.

明显而愚蠢的解决方案是用dispatch_sync替换敏感的dispatch_async方法,但绝对是我不喜欢的方法.

这种情况的推荐方法是什么?

我希望答案比“使用NSOperationQueue – 它可以限制并发 *** 作的数量”更加智能(类似主题:Number of threads with NSOperationQueueDefaultMaxConcurrentOperationCount).

更新1:唯一合适的模式是:将所有dispatch_async的块替换为并发队列,并在NSOperationQueue基于NSOperationQueue的并发队列中运行这些块,并设置最大 *** 作限制(在我的情况下,也可能设置最大 *** 作限制) AFNetworking运行其所有 *** 作的基于NSOperationQueue的队列.

解决方法 您正在启动太多网络请求. AFAIK在任何地方都没有记录,但你最多可以同时运行6个网络连接(考虑到 RFC 2616 8.1.4,第6段,这是一个明智的数字).之后你得到锁定,GCD补偿创建更多线程,顺便说一下,have a stack space of 512KB each根据需要分配页面.所以是的,请使用NSOperation.我用它来排队网络请求,在再次请求同一个对象时增加优先级,如果用户离开则暂停并序列化到磁盘.我还以字节/时间监视网络请求的速度并更改并发 *** 作的数量. 总结

以上是内存溢出为你收集整理的如何以编程方式控制和平衡iOS应用程序正在执行的多个线程?全部内容,希望文章能够帮你解决如何以编程方式控制和平衡iOS应用程序正在执行的多个线程?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1076229.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存