¿Qué hace que el progtwigdor de Linux parezca impnetworkingecible?

La pregunta se refiere a la salida de una aplicación de subprocesss múltiples, donde cada subprocess simplemente imprime su ID (número asignado por el usuario) en la salida estándar. Aquí todos los hilos tienen la misma prioridad y compiten por la cuota de CPU para imprimir en la salida estándar. Sin embargo, ejecutar la misma aplicación un número suficientemente grande de veces dará como resultado un order diferente de identificadores que se imprimen en la pantalla. Este order se debe al progtwigdor del sistema operativo, que es una pieza de software y, por lo tanto, determinista. No obstante, su comportamiento parece no determinista, lo que me lleva de vuelta a la pregunta inicial.

Solutions Collecting From Web of "¿Qué hace que el progtwigdor de Linux parezca impnetworkingecible?"

Esto es 100% normal con respecto a enhebrar en cualquiera y todos los sistemas operativos . Es probable que la documentation de la biblioteca de hilos, los ejemplos y tutoriales que pueda encontrar, etc. hagan hincapié en esto, ya que a menudo confunde a las personas cuando están aprendiendo las strings del hilo.

Los hilos están por defecto (y por definición) no sincronizados .

Esto significa que a less que haga arreglos para lo contrario (a través de lockings, semáforos, lo que sea), no espere que los subprocesss se ejecuten en un order particular. No importa lo que estén haciendo o cómo piensas que es "probable que suceda" en function de lo que están haciendo, etc. En pocas palabras: no pienses en ellos de esta manera, eso no es lo que son o cómo se significan. para ser utilizado. No se moleste en tener mentalizaciones como "Estoy en modo de usuario único, estoy tratando de calmar el sistema como el agua porque … y … bla bla" hasta el infinito, etc., es una pérdida de time, hay no hay nada que aprender de esa manera. El agua inevitablemente no está quieta , así es como son los líquidos. Fin de la historia. Muévete y disfruta.

Ejecutar subprocesss que, como dices, casi no hacen nada en un sistema que has configurado para hacer casi nada dará lugar a una carga ligera para el planificador, pero ten en count que la CPU todavía corre a toda velocidad y mucha nada pasar rápidamente no es necesariamente más pnetworkingecible que cualquier otro escenario. El progtwigdor no está destinado a sincronizar o pnetworkingecir order de hilos y processs. De verdad, realmente espero que esté diciendo que esto no te inspira a devise un experimento más complicado y pseudo lógico, porque como ya se dijo, eso es una pérdida de time, sigue.

Puede y probablemente sincronizarlos, pero observe que es un delicado truco que primero requiere que comprenda por qué no simplemente "lo hacen de forma natural" (pista: porque no hay ninguna razón para que lo hagan, no lo hacen).

"¿Qué hace que un sistema operativo determinista parezca no determinista?"

Quizás la analogía de la dinámica de fluidos no sea tan tonta. Los fluidos parecen caóticos, el humo puede incluso parecer vivo, y creo que en las matemáticas, el estudio de la dinámica de fluidos y la teoría del caos se cruzan . Sin embargo, la mayoría de las personas probablemente no se sorprendan con esto ("¡Increíble! ¿Qué podría causar tal comportamiento en un fenómeno natural? ¡Tal vez es evidencia de Dios!" … no) porque podemos entender cómo la interacción de las reglas deterministas (las leyes de dinámica de fluidos) vista en una cierta escala producirá resultados que son crudamente pnetworkingecibles ("Bueno, el agua se dertwigrá del cristal …") y por lo tanto son efectivamente caóticos o no deterministas (el patrón de la salpicadura en el table) . Incluso si eso es "solo un fuego muy pequeño" o un vaso de agua, reconocemos que hay un movimiento de literalmente trillones de trillones de partículas involucradas.

Si alguna vez ha ocupado un bucle con un contador solo para ver qué tan rápido puede contar su computadora, sabrá que es del order de miles de millones de veces por segundo. Tenga en count que la mayoría de los events "menores" del sistema que se ejecutan constantemente incluso con un sistema "inactivo" seguirá siendo mucho más sustancial que un hilo cuya actividad se mide imprimiendo una ID, si eso es todo lo que está haciendo el hilo . Siguiendo con nuestra analogía fluida, incluso en un día que parece "completamente sin viento" para nosotros, el humo todavía no forma una columna orderada (pero podemos ver más claramente cómo lo afecta su propio movimiento).

Se supone que el progtwigdor debe garantizar que todos los processs se ejecuten de forma equilibrada (la gravedad asegurará que el agua se derrame), sin embargo, no dándoles a cada uno exactamente 1 nanosegundo por vez (lo que puede hacer que su experimento sea más pnetworkingecible). Esto está muy bien ya que, una vez más, NO es el rol de un planificador sincronizar nada, es hacer que todo suceda de una manera equilibrada. Estos dos objectives no son lo mismo. Cuando ingrese a la synchronization, apreciará cómo, si bien la synchronization puede lograr un equilibrio claro, se logra a costa de la eficiencia.

Además, el progtwigdor de Linux usa un tree rojo-negro para organizar su queue, no solo ejecuta todo en una línea FILO (dudo que cualquier planificador de propósito general moderno lo haga). Eso implica una mayor complejidad y, por lo tanto, un comportamiento más aparentemente caótico.

No quiero alentarlo a que persista en su fijación, pero si tiene los hilos para realizar una tarea más sustancial, una que realmente les tome algo parecido al time para hacer, y los comience a compensar por unos segundos en un caso contrario sistema inactivo, entonces, de hecho, verá resultados completamente deterministas. Solo tenga en count que este no es un medio verdaderamente efectivo de synchronization : cuando el viento se levanta y el agua se pone áspera, verá que comienza el caos;)

"¿Conoce alguna investigación que estudie la influencia de estos events en el progtwigdor del sistema operativo?"

No, porque no hay nada verdaderamente misterioso al respecto, como en el caso de los fluidos. El planificador en realidad es completamente determinista, simplemente no en el sentido o en la escala que está considerando. Si coloca un montón de printk informativas en el código del kernel y comprende el algorithm del planificador, no encontrará nada no determinista: todo sucederá exactamente de la manera que se supone.