[{"data":1,"prerenderedAt":410},["ShallowReactive",2],{"navigation_docs":3,"-concurrencia-algoritmos-procesos":298,"-concurrencia-algoritmos-procesos-surround":405},[4,18,70,105,149,178,212,257],{"title":5,"path":6,"stem":7,"children":8,"icon":17},"Evaluación","\u002Fintroduction","1.introduction\u002F1.index",[9,12],{"title":10,"path":6,"stem":7,"icon":11},"Método de Evaluación","i-iconamoon-cheque-bold",{"title":13,"path":14,"stem":15,"icon":16},"Plataforma de Aprendizaje","\u002Fintroduction\u002Fplataforma","1.introduction\u002F2.plataforma","i-lucide-book-marked","i-lucide-house",{"title":19,"path":20,"stem":21,"children":22,"icon":25},"Interfaz Gráfica de Usuario","\u002Fgui","2.gui\u002F01.index",[23,26,30,34,38,42,46,50,54,58,62,66],{"title":24,"path":20,"stem":21,"icon":25},"¿Qué es una Interfaz Gráfica de Usuario (GUI)?","i-carbon-gui-management",{"title":27,"path":28,"stem":29,"icon":25},"Creación de Interfaces Gráficas de Usuario (GUI)","\u002Fgui\u002Fbuild-gui","2.gui\u002F02.build-gui",{"title":31,"path":32,"stem":33,"icon":25},"Componentes Básicos de Swing","\u002Fgui\u002Fcomponentes-basicos","2.gui\u002F03.componentes-basicos",{"title":35,"path":36,"stem":37},"El componente JFrame","\u002Fgui\u002Fjframe","2.gui\u002F04.jframe",{"title":39,"path":40,"stem":41},"El componente JPanel","\u002Fgui\u002Fjpanel","2.gui\u002F05.jpanel",{"title":43,"path":44,"stem":45},"El componente JButton","\u002Fgui\u002Fjbutton","2.gui\u002F06.jbutton",{"title":47,"path":48,"stem":49,"icon":25},"Elementos de texto en interfaces gráficas con Swing","\u002Fgui\u002Ftext","2.gui\u002F07.text",{"title":51,"path":52,"stem":53},"Elementos Visuales","\u002Fgui\u002Felementos-visuales","2.gui\u002F08.elementos-visuales",{"title":55,"path":56,"stem":57,"icon":25},"Eventos en Swing","\u002Fgui\u002Feventos","2.gui\u002F09.eventos",{"title":59,"path":60,"stem":61,"icon":25},"Controles en Swing","\u002Fgui\u002Fcontroles","2.gui\u002F10.controles",{"title":63,"path":64,"stem":65,"icon":25},"Atributos Comunes de los Componentes de Diseño","\u002Fgui\u002Fatributos-comunes","2.gui\u002F11.atributos-comunes",{"title":67,"path":68,"stem":69,"icon":25},"Layouts","\u002Fgui\u002Flayout","2.gui\u002F12.layout",{"title":71,"icon":25,"path":72,"stem":73,"children":74,"page":104},"Personalización","\u002Fpersonalizacion","3.personalizacion",[75,79,84,88,92,96,100],{"title":76,"path":77,"stem":78},"Jerarquía de clases en Swing","\u002Fpersonalizacion\u002Fjerarquia","3.personalizacion\u002F01.jerarquia",{"title":80,"path":81,"stem":82,"icon":83},"Personalización Inicial de Componentes Swing","\u002Fpersonalizacion\u002Fpersonalizacion-inicial","3.personalizacion\u002F02.personalizacion-inicial","i-carbon-palette",{"title":85,"path":86,"stem":87,"icon":83},"Tema y Personalización Avanzada en Swing","\u002Fpersonalizacion\u002Ftheme","3.personalizacion\u002F03.theme",{"title":89,"path":90,"stem":91,"icon":83},"Pintando en Swing","\u002Fpersonalizacion\u002Fpaint","3.personalizacion\u002F04.paint",{"title":93,"path":94,"stem":95,"icon":83},"Mi Tema 1: Comenzando con la Personalización","\u002Fpersonalizacion\u002Ftheme-start","3.personalizacion\u002F05.theme-start",{"title":97,"path":98,"stem":99,"icon":83},"UI Delegates: Personalizando la Apariencia de los Componentes","\u002Fpersonalizacion\u002Fui-delegates","3.personalizacion\u002F06.ui-delegates",{"title":101,"path":102,"stem":103,"icon":83},"Empleado delegadores de UI para personalizar la apariencia de los componentes","\u002Fpersonalizacion\u002Ftheme-02","3.personalizacion\u002F07.theme-02",false,{"title":106,"path":107,"stem":108,"children":109,"icon":148},"Programación concurrente","\u002Fconcurrencia","4.concurrencia\u002F01.index",[110,112,116,120,124,128,132,136,140,144],{"title":111,"path":107,"stem":108,"icon":83},"¿Qué es la concurrencia?",{"title":113,"path":114,"stem":115,"icon":83},"Unidades de Ejecución","\u002Fconcurrencia\u002Funidades-ejecucion","4.concurrencia\u002F02.unidades-ejecucion",{"title":117,"path":118,"stem":119,"icon":83},"Programa de flujo único y de flujo múltiple","\u002Fconcurrencia\u002Fflujos","4.concurrencia\u002F03.flujos",{"title":121,"path":122,"stem":123,"icon":83},"Hilos con Thread y Runnable","\u002Fconcurrencia\u002Fthread-runnable","4.concurrencia\u002F04.thread-runnable",{"title":125,"path":126,"stem":127},"Paralelismo V.S. Concurrencia","\u002Fconcurrencia\u002Fparalelismo","4.concurrencia\u002F05.paralelismo",{"title":129,"path":130,"stem":131,"icon":83},"Problemas clásicos de concurrencia","\u002Fconcurrencia\u002Fproblemas","4.concurrencia\u002F06.problemas",{"title":133,"path":134,"stem":135,"icon":83},"Emulando condiciones de carrera en Java","\u002Fconcurrencia\u002Fcondiciones-carrera","4.concurrencia\u002F07.condiciones-carrera",{"title":137,"path":138,"stem":139,"icon":83},"Semáforos en Java","\u002Fconcurrencia\u002Fsemaforos","4.concurrencia\u002F08.semaforos",{"title":141,"path":142,"stem":143,"icon":83},"La clase Timer en Java Swing","\u002Fconcurrencia\u002Ftimer","4.concurrencia\u002F09.timer",{"title":145,"path":146,"stem":147,"icon":83},"Algoritmos de ordenamiento de procesos","\u002Fconcurrencia\u002Falgoritmos-procesos","4.concurrencia\u002F10.algoritmos-procesos","i-carbon-parallel-groups",{"title":150,"path":151,"stem":152,"children":153,"icon":177},"Acceso a datos","\u002Fdatos","5.datos\u002F01.index",[154,157,161,165,169,173],{"title":155,"path":151,"stem":152,"icon":156},"Java y las bases de datos","i-carbon-database",{"title":158,"path":159,"stem":160},"Cliente Servidor","\u002Fdatos\u002Fcliente-servidor","5.datos\u002F02.cliente-servidor",{"title":162,"path":163,"stem":164},"CRUD","\u002Fdatos\u002Fcrud","5.datos\u002F03.crud",{"title":166,"path":167,"stem":168},"Sentencias Preparadas con JDBC","\u002Fdatos\u002Fsentencia-preparada","5.datos\u002F04.sentencia-preparada",{"title":170,"path":171,"stem":172},"DAO (Data Access Object)","\u002Fdatos\u002Fdao","5.datos\u002F05.dao",{"title":174,"path":175,"stem":176},"Usando Hibernate ORM","\u002Fdatos\u002Form","5.datos\u002F06.orm","i-gravity-ui-database-fill",{"title":179,"path":180,"stem":181,"children":182,"icon":211},"Programación móvil","\u002Fmovil","6.movil\u002F01.index",[183,186,191,195,199,203,207],{"title":184,"path":180,"stem":181,"icon":185},"¿Qué es Android y Kotlin?","i-carbon-mobile",{"title":187,"path":188,"stem":189,"icon":190},"¿Qué es Android Studio?","\u002Fmovil\u002Fandroid-studio","6.movil\u002F02.android-studio","i-carbon-application",{"title":192,"path":193,"stem":194,"icon":190},"¿Qué es Jetpack Compose?","\u002Fmovil\u002Fjetpack-compose","6.movil\u002F03.jetpack-compose",{"title":196,"path":197,"stem":198},"Filas y Columnas con Jetpack Compose","\u002Fmovil\u002Ffilas-columnas","6.movil\u002F04.filas-columnas",{"title":200,"path":201,"stem":202,"icon":190},"Componentes Básicos en Jetpack Compose","\u002Fmovil\u002Fcomponentes-basicos","6.movil\u002F05.componentes-basicos",{"title":204,"path":205,"stem":206,"icon":190},"Las Intenciones en Android con Jetpack Compose","\u002Fmovil\u002Fintentions","6.movil\u002F06.intentions",{"title":208,"path":209,"stem":210,"icon":190},"Navegación en Android con Jetpack Compose","\u002Fmovil\u002Fnavegacion","6.movil\u002F07.navegacion","phone_android",{"title":213,"icon":25,"path":214,"stem":215,"children":216,"page":104},"Ejemplos","\u002Fejemplos","7.ejemplos",[217,221,225,229,233,237,241,245,249,253],{"title":218,"path":219,"stem":220},"Ejemplo 01: Creando un validador abstracto de expresiones","\u002Fejemplos\u002Fejemplo-01","7.ejemplos\u002F01.ejemplo-01",{"title":222,"path":223,"stem":224},"Ejemplo 02: Diferencias de validar un JTextField y un JFormattedTextField","\u002Fejemplos\u002Fejemplo-02","7.ejemplos\u002F02.ejemplo-02",{"title":226,"path":227,"stem":228},"Ejemplo 03: Creando una Aplicación con GUI en Java Swing","\u002Fejemplos\u002Fejemplo-03","7.ejemplos\u002F03.ejemplo-03",{"title":230,"path":231,"stem":232},"Ejemplo 4: Estilizando componentes Swing con Delegadores","\u002Fejemplos\u002Fejemplo-04","7.ejemplos\u002F04.ejemplo-04",{"title":234,"path":235,"stem":236,"icon":83},"Ejemplo 5: Uso de Hilos con Thread y Runnable","\u002Fejemplos\u002Fejemplo-05","7.ejemplos\u002F05.ejemplo-05",{"title":238,"path":239,"stem":240,"icon":83},"Ejemplo 06: Manejando Hilos de formas Diferentes en Java","\u002Fejemplos\u002Fejemplo-06","7.ejemplos\u002F06.ejemplo-06",{"title":242,"path":243,"stem":244,"icon":83},"Ejemplo 7: Condiciones de carrera en Java","\u002Fejemplos\u002Fejemplo-07","7.ejemplos\u002F07.ejemplo-07",{"title":246,"path":247,"stem":248,"icon":83},"Ejemplo 8: Control de acceso a recursos compartidos con semáforos","\u002Fejemplos\u002Fejemplo-08","7.ejemplos\u002F08.ejemplo-08",{"title":250,"path":251,"stem":252,"icon":83},"Ejemplo 9: El restaurante y los pedidos","\u002Fejemplos\u002Fejemplo-09","7.ejemplos\u002F09.ejemplo-09",{"title":254,"path":255,"stem":256},"Ejemplo 10: Proceso FIFO (First In, First Out) con Semáforos y Swing","\u002Fejemplos\u002Fejemplo-10","7.ejemplos\u002F10.ejemplo-10",{"title":258,"icon":25,"path":259,"stem":260,"children":261,"page":104},"Actividades","\u002Factividades","8.actividades",[262,266,270,274,278,282,286,290,294],{"title":263,"path":264,"stem":265,"icon":25},"Actividad 1: Introducción al diseño de interfaces","\u002Factividades\u002Fact-01","8.actividades\u002F01.act-01",{"title":267,"path":268,"stem":269,"icon":25},"Actividad 2: Diseño de wireframes y prototipos","\u002Factividades\u002Fact-02","8.actividades\u002F02.act-02",{"title":271,"path":272,"stem":273,"icon":25},"Actividad 3: Propuesta de Proyecto y Wireframe inicial","\u002Factividades\u002Fact-03","8.actividades\u002F03.act-03",{"title":275,"path":276,"stem":277,"icon":83},"Actividad 4: Temas y Componentes Personalizados en Swing","\u002Factividades\u002Fact-04","8.actividades\u002F04.act-04",{"title":279,"path":280,"stem":281,"icon":83},"Actividad 5: Explicando la Concurrencia a un Niño de 5 Años","\u002Factividades\u002Fact-05","8.actividades\u002F05.act-05",{"title":283,"path":284,"stem":285,"icon":83},"Actividad 6: Simulación de una cocina con múltiples chefs (hilos)","\u002Factividades\u002Fact-06","8.actividades\u002F06.act-06",{"title":287,"path":288,"stem":289,"icon":83},"Actividad 7: Sistema de retiro bancario","\u002Factividades\u002Fact-07","8.actividades\u002F07.act-07",{"title":291,"path":292,"stem":293,"icon":83},"Actividad 8: Simulación de Round Robin con hilos e Interfaz Gráfica","\u002Factividades\u002Fact-08","8.actividades\u002F08.act-08",{"title":295,"path":296,"stem":297,"icon":83},"Actividad 9: CRUD con Hibernate y Swing","\u002Factividades\u002Fact-09","8.actividades\u002F09.act-09",{"id":299,"title":145,"body":300,"description":398,"extension":399,"links":400,"meta":401,"navigation":402,"path":146,"seo":403,"stem":147,"__hash__":404},"docs\u002F4.concurrencia\u002F10.algoritmos-procesos.md",{"type":301,"value":302,"toc":384},"minimark",[303,308,312,316,321,324,327,331,334,338,341,344,363,367,370,374,377,381],[304,305,307],"h2",{"id":306},"qué-son-los-algoritmos-de-ordenamiento-de-procesos","¿Qué son los algoritmos de ordenamiento de procesos?",[309,310,311],"p",{},"Los algoritmos de ordenamiento de procesos son técnicas utilizadas por los sistemas operativos para determinar el orden en que los procesos se ejecutan en un sistema. Estos algoritmos tienen como objetivo optimizar el rendimiento y la eficiencia del sistema, asegurando que los procesos se ejecuten de manera justa y eficiente.",[304,313,315],{"id":314},"tipos-de-algoritmos-de-ordenamiento-de-procesos","Tipos de algoritmos de ordenamiento de procesos",[317,318,320],"h3",{"id":319},"first-come-first-served-fcfs","First-Come, First-Served (FCFS)",[309,322,323],{},"El algoritmo FCFS es el más simple de los algoritmos de ordenamiento de procesos. En este algoritmo, los procesos se ejecutan en el orden en que llegan al sistema. El proceso que llega primero se ejecuta primero, seguido por el siguiente proceso en la cola.",[309,325,326],{},"Este algoritmo es fácil de implementar, pero puede llevar a problemas de rendimiento si un proceso largo bloquea a otros procesos más cortos. Por ejemplo, si un proceso con un tiempo de ejecución largo llega antes que varios procesos con tiempos de ejecución cortos, los procesos cortos tendrán que esperar mucho tiempo para ser ejecutados.",[317,328,330],{"id":329},"shortest-job-next-sjn","Shortest Job Next (SJN)",[309,332,333],{},"El algoritmo SJN ejecuta el proceso con el tiempo de ejecución más corto primero. Este algoritmo puede mejorar el rendimiento del sistema, ya que los procesos más cortos se ejecutan rápidamente, lo que reduce el tiempo de espera promedio. Sin embargo, este algoritmo puede llevar a la inanición de procesos más largos, ya que siempre se ejecutan los procesos más cortos primero.",[317,335,337],{"id":336},"round-robin-rr","Round Robin (RR)",[309,339,340],{},"El algoritmo Round Robin asigna un tiempo fijo a cada proceso y los ejecuta en un ciclo. Este algoritmo es justo y evita la inanición, ya que cada proceso tiene la oportunidad de ejecutarse después de un tiempo fijo. Sin embargo, el rendimiento del sistema puede ser subóptimo si el tiempo asignado es demasiado corto o demasiado largo. Si el tiempo asignado es demasiado corto, el sistema puede gastar mucho tiempo cambiando entre procesos, lo que reduce la eficiencia. Si el tiempo asignado es demasiado largo, los procesos pueden tener que esperar mucho tiempo para ser ejecutados.",[309,342,343],{},"El pseudocódigo para el algoritmo Round Robin es el siguiente:",[345,346,347,351,354,357,360],"ol",{},[348,349,350],"li",{},"Inicializar una cola de procesos.",[348,352,353],{},"Agregar los procesos a la cola en el orden en que llegan.",[348,355,356],{},"Mientras la cola no esté vacía:\na. Tomar el primer proceso de la cola (Pop).\nb. Ejecutar el proceso durante un tiempo fijo (quantum).\nc. Si el proceso no ha terminado después del tiempo fijo, re-encolarlo (Push) al final de la cola. De lo contrario, marcar el proceso como terminado y continuar con el siguiente proceso en la cola.",[348,358,359],{},"Repetir el proceso hasta que todos los procesos hayan terminado.",[348,361,362],{},"Fin del algoritmo.",[317,364,366],{"id":365},"priority-scheduling","Priority Scheduling",[309,368,369],{},"El algoritmo de Priority Scheduling asigna una prioridad a cada proceso y ejecuta los procesos con mayor prioridad primero. Este algoritmo puede ser preemptivo o no preemptivo. En el caso preemptivo, si un proceso con una prioridad más alta llega mientras un proceso de menor prioridad se está ejecutando, el proceso de menor prioridad será interrumpido y el proceso de mayor prioridad se ejecutará. Sin embargo, este algoritmo puede llevar a la inanición de procesos con baja prioridad, ya que siempre se ejecutan los procesos con mayor prioridad primero.",[317,371,373],{"id":372},"multilevel-queue-scheduling","Multilevel Queue Scheduling",[309,375,376],{},"El algoritmo de Multilevel Queue Scheduling divide los procesos en diferentes colas según su tipo o prioridad, y cada cola tiene su propio algoritmo de ordenamiento. Por ejemplo, una cola puede estar destinada a procesos interactivos que requieren una respuesta rápida, mientras que otra cola puede estar destinada a procesos por lotes que pueden esperar más tiempo. Este algoritmo es flexible y puede adaptarse a diferentes tipos de procesos, pero puede ser complejo de implementar y administrar.",[304,378,380],{"id":379},"conclusión","Conclusión",[309,382,383],{},"Los algoritmos de ordenamiento de procesos son fundamentales para el funcionamiento eficiente de los sistemas operativos. Cada algoritmo tiene sus ventajas y desventajas, y la elección del algoritmo adecuado depende de las características específicas del sistema y de los procesos que se ejecutan en él. Es importante que los sistemas operativos implementen algoritmos de ordenamiento de procesos efectivos para garantizar un rendimiento óptimo y una experiencia de usuario satisfactoria.",{"title":385,"searchDepth":386,"depth":386,"links":387},"",2,[388,389,397],{"id":306,"depth":386,"text":307},{"id":314,"depth":386,"text":315,"children":390},[391,393,394,395,396],{"id":319,"depth":392,"text":320},3,{"id":329,"depth":392,"text":330},{"id":336,"depth":392,"text":337},{"id":365,"depth":392,"text":366},{"id":372,"depth":392,"text":373},{"id":379,"depth":386,"text":380},"En este artículo se explicarán los algoritmos de ordenamiento de procesos en sistemas operativos, que son técnicas utilizadas para determinar el orden en que los procesos se ejecutan en un sistema operativo, con el objetivo de optimizar el rendimiento y la eficiencia del sistema.","md",null,{"editButton":104},{"icon":83},{"title":145,"description":398},"Kt8_xiamzuCjOXxLYpCNIWHPxE4QqYlXRCtG8rCHf8k",[406,408],{"title":141,"path":142,"stem":143,"description":407,"icon":83,"children":-1},"En este artículo se explicará cómo utilizar la clase Timer en Java Swing para programar tareas que se ejecuten después de un cierto retraso o de forma periódica, lo que es útil para crear interfaces de usuario dinámicas y reactivas.",{"title":155,"path":151,"stem":152,"description":409,"icon":156,"children":-1},"En este artículo se explicará cómo conectar una aplicación Java a una base de datos utilizando JDBC (Java Database Connectivity), lo que permite realizar operaciones de consulta, inserción, actualización y eliminación de datos de manera eficiente.",1775101373327]