我目前正在使用 Grand Central Dispatch(iOS 开发)从远程服务器下载图像。
这需要从主线程分派(dispatch)一个新线程;然后从服务器下载图像的任务发生在副线程上。任务完成后,我显然会用图像更新主线程 View 。
我的问题是,如果上述方法实际上可能通过打开两个 TCP channel 来提高性能(下载速度),或者我是否主要在另一个线程上执行同步操作,从而使其异步,从而不会使其更快。
根据我的观察,性能保持不变。也许这里有人可以解释“幕后”理论并将该理论应用于我上面的具体案例?
最佳答案
您可能不会看到下载速度有任何性能变化,因为主要问题是下载执行的速度有多快,这取决于网络。 iOS 应用程序中的逻辑不能阻塞主线程,因此无论如何它都需要在后台线程上运行。即使您的图像非常大,一旦下载了整个图像,PNG 的解码时间也会非常快。所以,你真的只是在等待下载完成。你也没有真正做太多,因为 iOS 已经在幕后使用了 http 请求的流水线,所以对同一个地址和端口的多个请求无论如何都可能通过同一个套接字推送。真正加快速度的唯一方法是使用更高级的图形压缩,以减少要下载的数据总量。
关于ios - 异步 I/O 和性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33641932/