ios - Swift 中的同步 HTTP 请求

标签 ios multithreading swift

<分区>

是否可以使用例如信号量等待异步请求(例如 NSURLSessionDataTask)。

有很多建议声称同步网络不好,但我不认为这是拒绝同步请求的理由,尤其是当它们在后台线程中完成时。

同步请求(在后台线程/队列中)的好处是不需要回调嵌套。

https://stackoverflow.com/a/31563134/466604中的答案仅显示了一种实现此目的的方法,但它带有隐含的挫败感。 (连同来自 https://devforums.apple.com/thread/9606?tstart=0 的其他劝阻)

我的问题是,鉴于这些同步请求发生在后台线程中,主要是为了避免嵌套回调,是否有必要阻止这种沮丧。

最佳答案

不,这不好。不要这样做。

iOS 甚至可能会在此过程中终止您的应用。此外,查看回调,因为它们是串行执行的下一步。

处理器需要这些周期来做其他事情,不要欺负人!

INSIGHT:

正如@EricD 所说,如果您的执行由于某种原因失败,该线程将丢失,直到您退出您的应用程序和操作系统。要求归还。

That thread is a valuable resource that must not be wasted and much more valuable in Mobile Operating Systems as iOS.

iPhone 的处理器不像现在的桌面处理器或 GPU 处理器那样强大,可以构建多达数十万个线程。

如果你使用信号量,你会在一段时间后醒来询问那个线程,如果条件没有被满足,那么你会再次进入休眠状态。这通常是毫秒级的时间,但仍然是处理器专用于一些无用的事情的时间。

MORE CLEAR

当您定义回调时,就好像您在 sleep 时对某人说。

别给我打电话,我准备好后会调用你。

相反,使用信号量就像:

如果你给我打 1000..0 次电话问我是否准备好出发就可以了

这种情况下的开销是显而易见的……您通常需要时间醒来并再次休眠。 那是浪费处理器时间

Keep in mind that in the best case you are using a semaphore that put the Thread into sleep for a while, and then ask again if it is OK to proceed.

If this is not the case, then this thread is using ALL the processor cycles assigned to it to ask you if it's ok to proceed, that is 100% CPU Usage in that Thread evaluating just a condition.

关于ios - Swift 中的同步 HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35342146/

相关文章:

ios - writeToFile 正在模拟器上工作,而不是在使用 ios swift 的设备上工作

ios - Xcode 7 中的 SIGABRT 错误

ios - 无法在ios swift中将文件保存到本地存储

ios - 对于 CCScene 标签检查中的循环 CCSprites?

Java多线程等待线程完成

java - JDialog 停止执行父 JFrame

c++ - 漏线的症状

ios - 解除模态视图 Controller 时如何保持呈现 View Controller 的方向?

ios - 如何用动画折叠tableview?

ios - Html 字符串转换为属性字符串\U00002028\n ios