Consideraciones de multitarea

La guía recomendada es usar el menor número de subprocesos posible, lo que minimiza el uso de recursos del sistema. De este modo se aumenta el rendimiento. La multitarea tiene requisitos de recursos y posibles conflictos que se deben tener en cuenta al diseñar la aplicación. Los requisitos de recursos son los siguientes:

  • El sistema consume memoria para la información de contexto que requieren los procesos y los subprocesos. Por lo tanto, el número de procesos y subprocesos que se pueden crear está limitado por la memoria disponible.
  • Realizar un seguimiento de un número elevado de subprocesos consume un tiempo de procesador significativo. Si hay demasiados subprocesos, la mayoría de ellos no podrá realizar un progreso significativo. Si la mayoría de los subprocesos actuales se encuentran en un proceso, los subprocesos de otros procesos se programan con menos frecuencia.

Proporcionar acceso compartido a los recursos puede generar conflictos. Para evitarlos, debe sincronizar el acceso a los recursos compartidos. Esto es cierto para los recursos del sistema (como los puertos de comunicaciones), los recursos compartidos por varios procesos (como identificadores de archivo) o los recursos de un único proceso (como variables globales) a los que acceden varios subprocesos. Si no se sincroniza correctamente el acceso (en los mismos procesos o en diferentes procesos), se pueden producir problemas como el interbloqueo y las condiciones de carrera. Los objetos y funciones de sincronización que puede usar para coordinar el uso compartido de recursos entre varios subprocesos. Para obtener más información sobre la sincronización, consulte Synchronizing Execution of Multiple Threads(Sincronizar ejecución de varios subprocesos). Reducir el número de subprocesos facilita y resulta más eficaz sincronizar los recursos.

Un buen diseño para una aplicación multiproceso es el servidor de canalización. En este diseño, creará un subproceso por procesador y creará colas de solicitudes para las que la aplicación mantiene la información de contexto. Un subproceso procesaría todas las solicitudes de una cola antes de procesar las solicitudes en la siguiente cola.