Hay preguntas estándar que parecen formularse en entrevistas sobre concurrencia, es probable que se le hagan algunas de las siguientes preguntas:
Los mayores problemas de concurrencia son los puntos muertos y las condiciones de carrera.
Los puntos muertos se producen porque para acceder de forma segura a los recursos compartidos en un entorno de subprocesos múltiples, debe “bloquear” el recurso; debe usar un mutex para evitar que cualquier otro subproceso acceda a ese recurso.
- ¿Cuáles son algunas de las preguntas del rompecabezas formuladas en las entrevistas?
- En entrevistas recientes de codificación de software (desde el año 2014), ¿se les ha permitido a los entrevistados codificar y rastrear usando una computadora / laptop en lugar de una pizarra?
- ¿Qué crees que apesta más sobre las entrevistas de la industria de TI india?
- ¿Cómo debo prepararme para una entrevista SDE in situ en Microsoft? Me cuesta elaborar un plan para poder cubrir / actualizar la mayoría de los temas en 2 semanas.
- ¿Hay alguna manera de hacer que todos los elementos de una matriz sean positivos y luego recuperarlos?
Espere preguntas como:
¿Qué es un punto muerto?
R: Un punto muerto es donde múltiples subprocesos compiten por recursos bloqueados por otros subprocesos, por ejemplo, cuando dos subprocesos intentan adquirir un recurso retenido por el otro subproceso.
¿Cómo se reduce el riesgo de un punto muerto?
R: Intente asegurarse de que el código siempre adquiera un bloqueo de recursos en un orden establecido. Entonces, por ejemplo, si el Hilo 1 y el Hilo 2 quieren el recurso A y el recurso B, y siempre intentan adquirir el recurso A primero, luego el recurso B en ese orden, entonces no puede ocurrir un punto muerto. Un punto muerto solo ocurre si el hilo 1 intenta adquirir el recurso A primero, y el hilo 2 intenta adquirir el recurso B primero.
Las condiciones de carrera se producen porque ha olvidado bloquear un recurso compartido, porque varios subprocesos pueden actualizar o leer un recurso simultáneamente al mismo tiempo. El resultado es el caos, porque no hay forma de predecir qué hilo intentará actualizar el recurso primero.
¿Qué es una condición de carrera?
R: Una condición de carrera es cuando varios subprocesos intentan actualizar o leer un recurso sin bloquear el recurso. El estado de la aplicación depende de qué subproceso llegue primero, de ahí el término “condición de carrera”.
¿Cómo se previenen las condiciones de carrera?
R: Asegúrese de que los recursos compartidos se administren correctamente, con mutexes u otras herramientas de administración de concurrencia para garantizar un acceso ordenado al recurso.
Otra pregunta que a veces surge es el bloqueo de lector y escritor. Normalmente, si está accediendo a un recurso, lo bloquea, pero en un sistema de alto rendimiento esto puede causar un retraso excesivo: si tiene 50 hilos que intentan acceder al recurso al mismo tiempo, hacer que todos esperen su turno puede tener un Impacto grave en el rendimiento.
Una solución es un bloqueo de lector y escritor. El bloqueo de lector y escritor tiene dos niveles diferentes de bloqueo, uno para lecturas y otro para escrituras. Si un hilo quiere leer el valor del recurso compartido, no hay problema en que otros hilos también adquieran un bloqueo de lectura al mismo tiempo. Entonces, si los 50 hilos solo quieren leer el valor del recurso, todos pueden hacerlo al mismo tiempo.
Pero si un hilo quiere escribir el recurso (actualizar el valor), todos están bloqueados hasta que se libere el bloqueo de escritura.
Espero que esto ayude, pero le recomiendo que también experimente con la concurrencia, escribiendo su propio código. No hay sustituto para aprender a través de la experiencia.