"¡Hola, amigo! Tenemos un tema nuevo y muy difícil. Lo siento. A menudo se considera uno de los temas más complejos no solo en Java, sino también en la programación en general. Estoy hablando de subprocesos múltiples " .

Imagine un juego de computadora típico, por ejemplo, un juego de carreras de naves espaciales. Estás volando a través de las extensiones del cosmos, esquivando meteoritos y patrullas. Otras dos docenas participan contigo en estas carreras ilegales.

Digamos que decides escribir un juego así. Su programa deberá realizar un seguimiento de los comandos (entradas del teclado), mover las naves espaciales, calcular sus trayectorias, determinar las consecuencias de cualquier colisión y dibujar todo esto en la pantalla del usuario. Este es un trabajo muy complejo.

¿Recuerdas cómo resolvimos el «problema de gran complejidad» en el ejemplo de la naviera en crecimiento?

Lo dividimos en departamentos independientes y especificamos (estandarizamos) rígidamente cómo podrían interactuar.

"¡¿Pero qué hacemos cuando las partes independientes tienen que realizar algún trabajo en paralelo con las otras partes?! La respuesta a esta pregunta son los hilos ".

Trate de imaginar un programa como un pequeño robot que corre alrededor del código y ejecuta comandos . Primero, ejecuta un comando en una línea, luego pasa a la siguiente, y así sucesivamente.

"Puedo verlo en mi mente. ¡Pan comido!"

"Muy bien. Y ahora imagine que tiene varios de estos robots. Mientras uno maneja la entrada del usuario, un segundo actualiza objetos basados ​​en esa entrada. Un tercero ejecuta el código para mostrar estos objetos en la pantalla. Varias veces por segundo, un cuarto verifica si algún barco ha colisionado y, si es así, calcula los resultados de la colisión".

Por lo tanto, no solo podemos dividir el programa en partes/objetos independientes, sino también hacer que estas partes puedan realizar su trabajo independientemente unas de otras. Cuanta menos interacción entre las partes individuales, menos complejo es el programa.

Imagina que pudieras reemplazar al administrador con un script que envía cartas . Y los otros departamentos de la empresa ni siquiera pudieron darse cuenta de que había habido un cambio. Este tipo de cosas sucedió ya en el siglo 26 con excelentes resultados. La mayoría de los gerentes, e incluso los altos ejecutivos, pueden ser reemplazados con éxito por un guión de complejidad promedio. Sólo después de la intervención del «sindicato del plancton de oficina» se acabaron los despidos masivos de directivos. Pero yo divago.

"¡Que interesante!"

"No solo puede haber varios de estos "pequeños robots" ejecutando código, sino que también pueden comunicarse entre sí y generar nuevos robots".

"¿Engendrar nuevos robots?"

"Sí, para realizar nuevas tareas. A veces es ventajoso crear otro robot (otro hilo) para realizar alguna acción al mismo tiempo que el hilo actual (robot)".

" Esto suena como algo bueno, pero no puedo pensar en dónde lo usaría " .

¿Y por qué los llamamos « hilos »?

"Imagínese que cada robot es de un color diferente y marca los comandos con su color a medida que los ejecuta. El camino que toma el pequeño robot es como la línea que deja un lápiz. Este camino se extiende detrás del robot, como un hilo detrás . Una aguja."

Cada «pequeño robot» tiene una tarea para la que fue creado. Puede pensar que un hilo es el conjunto de comandos que se ejecutan mientras realiza esta tarea.

Digamos que estás volando en una nave espacial para entregar carga. Entonces «entregar carga» es tu tarea, y estás en medio de realizarla. Y tu ruta de vuelo es tu hilo. Podríamos decir que cada nueva tarea, cada tarea aún no completada, tiene su propio hilo (un camino que todavía hay que recorrer).

"En otras palabras, hay una tarea y un "pequeño robot" que la ejecuta. ¿Y un hilo es solo el camino que toma el robot mientras completa su tarea?"

"Exactamente."

Así es como funciona todo en el fondo. Debido a que la computadora tiene un solo procesador, solo puede ejecutar un comando a la vez. Así que esto es lo que sucede: el procesador cambia constantemente entre subprocesos. Cambia a un nuevo subproceso, ejecuta algunos comandos, luego cambia al siguiente subproceso, ejecuta algunos comandos, etc. Pero dado que el cambio entre subprocesos ocurre cientos de veces por segundo, nos parece que todos los subprocesos se ejecutan simultáneamente.

Multiproceso - 1