Generalidades

Introducción a la concurrencia en iOS | Autor: Abhishek Singh | Diciembre de 2021

Abhishek Singh

Hola a todos,

Estamos comenzando una nueva serie sobre la concurrencia de iOS. He notado que una gran cantidad de preguntas de la entrevista provienen de la concurrencia. Si está buscando un cambio y recientemente se ha entrevistado con alguna buena empresa basada en productos, entonces debe haber encontrado uno o más problemas de concurrencia.

Antes de comenzar nuestra nueva serie, quiero decirle que si desea implementar un cierto nivel de seguridad en su aplicación móvil y obtener conocimientos sobre HTTPS, fijación de certificados, dispositivos con jailbreak y autenticación multifactor, entonces el siguiente artículo es adecuado. para ti.

segundo, Discutiremos los siguientes puntos en este artículo y los siguientes artículos. Este blog solo puede contener sus conocimientos básicos y sus detalles pueden aparecer en nuestros próximos artículos:

Que es concurrencia

La concurrencia es la ejecución de múltiples secuencias de instrucciones al mismo tiempo. Lo explicaré en detalle, pero antes de eso, necesitamos entender el significado de la primera línea, es decir, el significado de ejecutar múltiples instrucciones.

Suponga que su gerente le asigna 10 tareas para completar en un día, y debe notificar a su gerente después de completar cada tarea. Después de completar todas las tareas, solo necesita notificar a su gerente para solicitar un día libre.

Empieza a trabajar en la tarea y los métodos que puede tomar, como por ejemplo:

La primera opción en la que solo nos ocupamos de una tarea a la vez se llama operación secuencial. Alguien debe sospechar que hay algo mal con la primera opción, ¿por qué no podemos hacer nuestro pedido de solicitud?

Si tú también lo crees, piénsalo. Consideremos un caso de uso muy simple, donde la décima tarea puede requerir muy poco tiempo en comparación con otras tareas, pero la tarea aún tiene que esperar hasta que se completen todas las demás.

Ahora, volvamos al concepto de concurrencia. El ejemplo que damos depende de una sola persona, es decir, «usted». Este tipo de sistema funciona en un entorno de un solo subproceso, donde un solo subproceso cambia diferentes tareas.

Suponga que es el líder del equipo y su función es asignar tareas a un equipo de tamaño 5. Después de recibir esta tarea de su gerente, puede asignar la tarea a los miembros de su equipo, y cada miembro puede elegir una tarea. Según el sistema operativo, cada miembro completa una tarea y la completa y luego se transfiere a otra tarea, o puede seleccionar varias tareas cambiando entre diferentes tareas. Este tipo de sistema se denomina sistema de subprocesos múltiples.

Esta es la concurrencia de la ejecución simultánea de múltiples tareas.

¿Por qué necesitamos la concurrencia?

Bueno, hemos discutido por qué realmente necesitamos la concurrencia, y también hemos discutido uno de los casos de uso en los que necesitamos la concurrencia. Veamos qué más se puede lograr usando la concurrencia:

Los tres beneficios anteriores parecen ser consistentes con lo que discutimos anteriormente.

Desventajas de la concurrencia

Aunque tenemos muchas ventajas de usar la concurrencia, también existen algunas desventajas al usarla. Si no se maneja adecuadamente, la simultaneidad puede poner en problemas la vida de los desarrolladores. No lo use a menos que esté muy satisfecho con él. Si la simultaneidad se usa incorrectamente, pueden ocurrir algunos problemas. Estos problemas son:

Discutamos estos temas en detalle: –

let lock = NSLock()class ConcurrentTask {

func taskOne(threadCall: Bool) {

threadCall ? print("This was called from first thread") : print("called from second func for first task")lock.lock()if threadCall {
sleep(1)
taskTwo(threadCall: false)
} else {
print("I am to print first task")
}
lock.unlock()
}
func taskTwo(threadCall: Bool) {threadCall ? print("This was called from second thread") : print("called from first func for second task")lock.lock()
if threadCall {
sleep(1)
taskTwo(threadCall: false)
} else {
print("I am to print first task")
}
lock.unlock()
}
}
let queue = DispatchQueue(label: "concurrentQueue", attributes: .concurrent)let obj = ConcurrentTask()queue.async {
obj.taskOne(threadCall: true)
}
queue.async {
obj.taskTwo(threadCall: true)
}

Este es otro ejemplo en el que hay 2 funciones y todas se llaman entre sí internamente. Todos se inician a partir de otros hilos e internamente todos dependen unos de otros, por eso se denominan.

Ahora, en aras de la simplicidad, digamos que el hilo 1 está procesando la tarea uno y el hilo 2 está procesando la tarea 2. Este es un sistema concurrente, por lo que comienzan a procesar al mismo tiempo. Cuando todos están procesando sus funciones, taskOne llama a taskTwo internamente y taskTwo llama a taskOne. Entonces, ya están lidiando con esto mientras intentan acceder a otras funciones que los hicieron estar en un estado de bloqueo. Todos seguirán esperando a que se libere otro hilo.

2. Condiciones de competencia: Esto sucede cuando varios subprocesos acceden al mismo recurso e intentan cambiar su valor. En este caso, nuestros resultados no serán los esperados. Para evitar las condiciones de carrera, podemos elegir una variedad de formas, una de las cuales es usar Lock, que hemos mostrado en el ejemplo de interbloqueo anterior. Hay más soluciones para evitar las condiciones de carrera, de las que hablaremos en el próximo artículo.

3. Inversión de prioridad: Esto sucede cuando se necesitan tareas de alta prioridad para manejar los recursos ocupados por tareas de baja prioridad. Ahora, a menos que se libere la tarea de baja prioridad, se bloqueará o completará su trabajo, y la tarea de alta prioridad debe esperar.

¿Cómo implementamos la concurrencia en iOS?

Podemos implementar la concurrencia en iOS de tres formas. Podemos enumerarlos como:

Ahora en GCD, tenemos DispatchQueue, DispatchGroup, DispatchWorkItem, DispatchSemaphore. Aprenderemos más sobre ellos en los próximos artículos y aprenderemos a usarlos para evitar puntos muertos, condiciones de carrera e inversiones prioritarias.

Todo esto se trata de concurrencia, y lo veremos en el próximo artículo😊.

LEER  No dejes que la libertad de elección te impida tomar medidas | Al derrotar a BigTech | Septiembre de 2021

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba