E / S y performance asíncronos

Actualmente estoy usando Grand Central Dispatch (desarrollo de iOS) para descargas de imágenes desde un server remoto.

Esto implica enviar un nuevo hilo desde el hilo principal; la tarea de download la image del server está sucediendo en el hilo lateral. Cuando la tarea se completa, obviamente actualizo la vista del hilo principal con la image.

Mi pregunta es si el método anterior realmente aumenta el performance (velocidad de descarga) quizás abriendo dos canales TCP o si estoy realizando principalmente una operación síncrona solo en otro hilo, por lo tanto, haciéndolo asíncrono y, por lo tanto, no hacerlo más rápido.

Según mis observaciones, el performance se mantuvo igual. ¿Quizás alguien aquí pueda explicar la teoría "bajo el capó" y aplicar la teoría a mi caso concreto arriba?

Es probable que no vea ningún cambio en el performance con la velocidad de descarga, ya que el problema principal es qué tan rápido se ejecuta la descarga y eso depende de la networking. Su lógica dentro de una aplicación de iOS no puede bloquear el hilo principal, por lo que necesita ejecutarse en un hilo de background sin importar qué. Incluso si su image es muy grande, el time de deencoding de PNG será muy rápido una vez que se descargue la image completa. Entonces, realmente estás esperando que se complete la descarga. En realidad, tampoco está haciendo mucho porque iOS ya utiliza el canalizado de requestes HTTP detrás de las escenas, por lo que es probable que múltiples requestes a la misma dirección y puerto se envíen a través del mismo socket de todos modos. La única forma en que realmente puede acelerar las cosas es usar una compression de charts más avanzada para networkingucir la cantidad total de datos que se downloadán.

Apple hace todo lo posible para manejar esto a nivel del sistema operativo y la implementación "under the hood" se optimiza constantemente a medida que pasa el time. La gestión manual de tomas de stream y conexiones para fines básicos puede no ser algo de lo que deba preocuparse; de ​​hecho, sus esfuerzos pueden deshacerse mediante optimizaciones más adelante.

El consejo general sobre las networkinges iOS es asegurarse de que está utilizando los frameworks de networking actualmente recomendados para su versión de iOS (actualmente NSURLSession y sus amigos) y, lo que es más importante, que lo está utilizando correctamente . De esta forma, automáticamente aprovecha las optimizaciones de networking que el sistema está haciendo por usted.

Si asume que Apple ya ha implementado la mejor networking de casos en su nombre, las siguientes opciones son asegurarse de que está obteniendo el tamaño mínimo de file para su caso de uso y sus packages están recorriendo la distancia física mínima desde su dispositivo al server de imágenes .

Si estás interesado: hay muchos más detalles detallados sobre las networkinges disponibles para iOS. Recomiendo ver Networking con NSURLSession en la conferencia WWDC 2015 y si necesitas convencer a Apple de que saben lo que están haciendo y están optimizando la networking constantemente. mire su aplicación y networkinges de próxima generación .