• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - afnetworking 使用全局队列作为完成队列

[复制链接]
菜鸟教程小白 发表于 2022-12-13 11:47:16 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我们正在创建有时会执行同步以更新数据库状态的应用程序。有时可能会一个接一个地执行大约 100 个响应相当大的请求。为了处理完全同步,我们创建了单独的 AFURLSessionManager 实例。为与同步过程无关的请求指定了另一个管理器(必须在主线程中处理)。

// Manager for requests related with sync process
syncManager = AFURLSessionManager(sessionConfiguration: ...)
syncManager.completionQueue = dispatch_queue_create("sync-queue", DISPATCH_QUEUE_SERIAL)

// Manager for requests not related with sync process (must be handled in main thread)
defaultManager = AFURLSessionManager(sessionConfiguration: ...) 

我们发现,对于较旧的设备 (iPhone 4/4S),在同步进行时使用默认管理器执行请求确实会消耗更多时间。我们决定为同步管理器使用全局队列,如下所述:

syncManager.completionQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0)

它提高了应用程序的性能。我的问题是使用全局队列(而不是串行队列)作为 AFURLSessionManager 的完成队列是否安全?你曾经使用过类似的方法吗?我将不胜感激您的任何帮助!



Best Answer-推荐答案


全局队列实际上与您创建的串行队列非常不同——因为全局队列是并发的。放置在全局队列中的任务将被操作系统自动放置在理想​​的线程中。

与并发队列相关的“风险”是,由于任务可以在不同的线程上同时运行,如果您在不同的线程中读取/写入相同的属性,最终可能会遇到问题。

正如您所说,您正在更新数据库,这使得您使用并发队列读取/写入数据库本质上不安全

如果您只是阅读或写作,这应该不是什么大问题。但仍有风险

我唯一的经验是发出数百个读取/写入数据库的请求,并且我使用了没有问题的串行队列

关于ios - afnetworking 使用全局队列作为完成队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33725057/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap