异步I/O和性能
Asynchronous I/O and performance
我目前正在使用 Grand Central Dispatch(iOS 开发)从远程服务器下载图像。
这需要从主线程分派一个新线程;然后从服务器下载图像的任务发生在副线程上。当任务完成时,我显然用图像更新了主线程视图。
我的问题是,上面的方法是否真的通过打开两个 TCP 通道提高了性能(下载速度),或者我是否主要在另一个线程上执行同步操作,从而使其成为异步的,从而没有使它成为任何更快。
根据我的观察,性能保持不变。也许这里有人可以解释 "under the hood" 理论并将该理论应用到我上面的具体案例中?
您可能不会看到下载速度有任何性能变化,因为主要问题是下载执行的速度有多快,这取决于网络。 iOS 应用程序中的逻辑不能阻塞主线程,因此无论如何它都需要在后台线程上 运行。即使您的图像非常大,一旦下载了整个图像,PNG 的解码时间也会非常快。所以,你真的只是在等待下载完成。你也没有真正做太多,因为 iOS 已经在幕后使用了 http 请求的流水线,所以对同一个地址和端口的多个请求无论如何都可能通过同一个套接字推送。真正加快速度的唯一方法是使用更高级的图形压缩,以减少要下载的数据总量。
Apple 竭尽全力在操作系统级别处理此问题,并且随着时间的推移,"under the hood" 实施不断优化。出于基本目的手动管理套接字和连接可能不是您需要担心的事情 - 事实上,您的努力可能会被进一步优化取消。
关于 iOS 网络的一般建议是确保您使用的是当前推荐的网络框架,适用于您的 iOS 版本(目前 NSURLSession 和朋友)等等重要的是您 正确地 使用了它。这样您就可以自动利用系统为您进行的网络优化。
如果您假设 Apple 已经为您实施了最佳案例网络,那么您的下一个选择是确保您为您的用例获取最小文件大小,并且您的数据包传输的物理距离最短设备到图像服务器。
如果您感兴趣 - 有大量关于 iOS 可用网络的详细信息 - 我建议观看 Networking with NSURLSession from the 2015 WWDC conference and if you need convincing that Apple know what they're doing and are optimising the networking stack constantly definitely watch Your app and Next Generation Networks。
我目前正在使用 Grand Central Dispatch(iOS 开发)从远程服务器下载图像。
这需要从主线程分派一个新线程;然后从服务器下载图像的任务发生在副线程上。当任务完成时,我显然用图像更新了主线程视图。
我的问题是,上面的方法是否真的通过打开两个 TCP 通道提高了性能(下载速度),或者我是否主要在另一个线程上执行同步操作,从而使其成为异步的,从而没有使它成为任何更快。
根据我的观察,性能保持不变。也许这里有人可以解释 "under the hood" 理论并将该理论应用到我上面的具体案例中?
您可能不会看到下载速度有任何性能变化,因为主要问题是下载执行的速度有多快,这取决于网络。 iOS 应用程序中的逻辑不能阻塞主线程,因此无论如何它都需要在后台线程上 运行。即使您的图像非常大,一旦下载了整个图像,PNG 的解码时间也会非常快。所以,你真的只是在等待下载完成。你也没有真正做太多,因为 iOS 已经在幕后使用了 http 请求的流水线,所以对同一个地址和端口的多个请求无论如何都可能通过同一个套接字推送。真正加快速度的唯一方法是使用更高级的图形压缩,以减少要下载的数据总量。
Apple 竭尽全力在操作系统级别处理此问题,并且随着时间的推移,"under the hood" 实施不断优化。出于基本目的手动管理套接字和连接可能不是您需要担心的事情 - 事实上,您的努力可能会被进一步优化取消。
关于 iOS 网络的一般建议是确保您使用的是当前推荐的网络框架,适用于您的 iOS 版本(目前 NSURLSession 和朋友)等等重要的是您 正确地 使用了它。这样您就可以自动利用系统为您进行的网络优化。
如果您假设 Apple 已经为您实施了最佳案例网络,那么您的下一个选择是确保您为您的用例获取最小文件大小,并且您的数据包传输的物理距离最短设备到图像服务器。
如果您感兴趣 - 有大量关于 iOS 可用网络的详细信息 - 我建议观看 Networking with NSURLSession from the 2015 WWDC conference and if you need convincing that Apple know what they're doing and are optimising the networking stack constantly definitely watch Your app and Next Generation Networks。