1. Prefacio
Recientemente, estaba entrevistando y revisado nuevamente múltiples subprocesos, con la esperanza de profundizar mi comprensión de la múltiples subprocesos.
1. ¿Qué es un proceso?
1). Para comprender los hilos, primero debemos entender el proceso. En términos de Layman, un proceso es una aplicación que se ejecuta en el sistema.
2). Cada hilo existe de forma independiente y se ejecuta en su espacio de memoria dedicado y protegido.
3). Por ejemplo, al abrir el sistema QQ o Xcode, se abrirán dos procesos por separado como se muestra en la figura:
4) Podemos ver los procesos habilitados en el sistema MAC a través del "Monitor de actividad".
2. ¿Qué es un hilo?
1). Un proceso debe tener hilos para ejecutar tareas, es decir, un proceso debe tener al menos un hilo.
2). Los subprocesos son la unidad de ejecución básica de un proceso, y todas las tareas de un proceso (programa) se ejecutan en el hilo.
3). Por ejemplo, el uso de Kugou para reproducir música y usar Thunder para descargar películas requieren ejecutarse en el hilo como se muestra en la figura:
3. ¿Qué es el hilo serie?
1). Un hilo se ejecuta en serie (ejecutado secuencialmente), lo que significa que un hilo solo puede ejecutar una tarea dentro del mismo tiempo.
2). Diagrama de ejecución en serie, como un hilo descarga 3 archivos (archivos A, B, C)
4. ¿Qué es múltiples subprocesos?
1). Se pueden abrir múltiples hilos en un proceso, y cada hilo puede realizar diferentes tareas simultáneamente (simultáneamente).
2). Lista de relaciones similar: proceso ----> taller; Tema ----> Trabajadores del taller
3). Diagrama multiproceso, como abrir 3 hilos al mismo tiempo para descargar 3 archivos (archivos A, B, C)
5. Principio de lectura múltiple
1). Al mismo tiempo, la CPU solo puede ejecutar un hilo, y solo un hilo está funcionando (ejecución).
2). La ejecución concurrente multiproceso (simultánea) es en realidad la CPU rápidamente programas (conmutadores) entre múltiples hilos.
3). Si el programa de CPU se eleva lo suficientemente rápido, causará la ilusión de la ejecución concurrente de múltiples subprocesos.
4). Desventajas de la lectura múltiple:
1. Cada hilo ocupará una cierta cantidad de espacio de memoria (por defecto: el hilo principal ocupa 1 MB y el hilo infantil ocupa 512kb).
Si se encienden demasiados hilos, ocupará mucho espacio de memoria, lo que hará que el rendimiento del programa se degrade.
2. Cuanto más hilos, mayor será la sobrecarga del hilo de programación de la CPU (similar a los trabajadores más de fábrica, mayor será la sobrecarga de fábrica).
3. Haga que la programación sea más compleja: como la comunicación de datos multiproceso y el intercambio de datos entre múltiples hilos.
5). Ventajas de múltiples lectura:
1. Puede mejorar adecuadamente la eficiencia de ejecución del programa.
2. Puede mejorar adecuadamente la utilización de recursos (CPU y la utilización de la memoria)
6. ¿Cuál es el hilo principal?
1). Un hilo se abrirá de forma predeterminada después de abrir un programa iOS. Este hilo se llama "hilo principal" o "hilo UI".
2). Las funciones principales del hilo principal:
1. Muestra/actualiza la interfaz de la interfaz de usuario
2. Maneje eventos de interfaz de usuario (como eventos de clic, eventos de desplazamiento, eventos de arrastre, etc.)
3). Notas en el hilo principal:
1. No coloque operaciones que consuman mucho tiempo en el hilo principal. Las operaciones que requieren mucho tiempo en el hilo principal causarán retraso del programa.
7. Demo de operación que consumen mucho tiempo
1) demostración que se ejecuta directamente en el hilo principal
-(void) touchesbegan: (nsset <uitouch *> *) Touch withEvent: (uievent *) evento {// Obtenga el método de ejecución actual y el hilo actual // número == PRINCIPAL PRINCIPIO // Number! = Otros hilos, hilos infantiles y hilos secundarios nsLog (@"%s -----%@", __ func __, [nsThread de lectura actual]); Operación de UI para tartamudear [Self Longtimeperation];}#Pragma Mark-Time Operation-(void) Longtimeperation {for (int i =; i <; i ++) {nslog (@"%d", i);}}2) demostración que se ejecuta en hilo infantil
-(void) touchSbegan: (nsset <uitouch *> *) Touch withEvent: (uievent *) evento {// Obtenga el método de ejecución actual y el hilo actual // número == PRINCIPAL PROUM // Number! = Otros hilos, hilos infantiles y hilos secundarios nsLog (@"%s -----%@", __ func __, __, nsthread]; El hilo infantil se ejecutará sin afectar la operación de la interfaz de usuario [Auto-performeSelectorInbackground: @selector (Longtimeperation) withObject: nil];}#Pragma Mark-Time-Time-Consuming Operation- (void) Longtimeperation {for (int i =; i <; i ++) {nsLog (@"%d", i);}}El contenido anterior es el conocimiento múltiple de iOS presentados por el editor. ¡Espero que te sea útil!