/* Page prose (es) */
"WrappingUp" = "# Resumen\n\nEstas dos herramientas responden dos preguntas distintas, y saber cuál estás haciendo es la mayor parte de la batalla: un grupo pregunta \"¿cuándo está terminado todo este lote?\", un semáforo pregunta \"¿cuántas pueden ejecutarse a la vez?\". Ambas recompensan la contabilidad cuidadosa y castigan el descuido con cuelgues, fallos e interbloqueos. Ten a mano las reglas de equilibrio de abajo.\n\n* Un **`DispatchGroup`** sigue un conjunto de tareas y se dispara cuando todas han terminado; un **`DispatchSemaphore`** limita cuántas tocan un recurso a la vez.\n* Las dos **se combinan**: usa un semáforo para limitar cuántas se ejecutan a la vez y un grupo para saber cuándo ha terminado todo el lote, el mismo emparejamiento que usó el ejemplo del espresso.\n* `notify(queue:)` ejecuta un callback cuando el grupo se vacía y **nunca bloquea**. Prefiérelo. `wait()` bloquea el hilo que lo llama, así que mantenlo fuera del hilo principal.\n* **Trampa:** `enter`/`leave` desbalanceados o bien **cuelgan** (muy pocos leaves) o bien **fallan** (demasiados); un `wait()` sin un `signal()` correspondiente provoca un interbloqueo de todos los que están detrás. `defer { group.leave() }` / `defer { sem.signal() }` justo después es el patrón seguro.\n* **Trampa:** lanzar docenas de tareas bloqueadas por semáforo a una cola global puede agotar el grupo de hilos de GCD. Para una limitación intensa, una pequeña cola dedicada (o, más adelante, la concurrencia estructurada) se comporta mejor.\n* **Trampa:** un semáforo limita *cuántas* se ejecutan a la vez, no *cuál* se ejecuta a continuación: no dependas del orden en que las tareas adquieren permisos.\n* Con una cuenta de 1 un semáforo actúa como un cerrojo, pero existen herramientas más seguras y difíciles de olvidar, y los actores reemplazarán esto por completo.\n\n---\n\n## A continuación\n\nEl siguiente capítulo es [Riesgos de la concurrencia](Concurrency%20Hazards.playgroundchapter/Overview): la carrera de datos que vislumbraste en el ejemplo del conteo, además del interbloqueo y la inversión de prioridad, qué sale mal cuando el estado compartido y el bloqueo chocan, y cómo razonar sobre ello.\n\n[Anterior](@previous)  |  página 8 de 8";
