[Monitores] Array of Conditions?

Re: [Monitores] Array of Conditions?

de Manuel Freire -
Número de respuestas: 0


Que se ejecuten en serie es que vayan uno atrás de otro con todos los demás procesos bloqueados esperando un recurso, en definitiva sin concurrencia. El caso extremo sería poner un mutex que se pide al principio del proceso y se devuelve al final, en definitiva si bien estás programando concurrentemente estás forzando a que se ejecuten uno atrás del otro en serie.

Serializándolo lo estaba usando como aproximación a eso: si tenés 500 procesos y de esos 495 están bloqueados esperando en el mismo semáforo/entrycall/etc es probable que estés haciendo algo mal, puede llegar a pasar si hay un recurso único y todos lo necesitan pero generalmente en los ejercicios que se plantean en el curso es una mala resolución. 

Pensá en el ejemplo hablado más arriba que hay un monitor que maneja las quinientos tenedores y sin importar cómo lo guarda adentro qué tenedores están ocupados y cuáles no. Vos no vas a quedar nunca en deadlock ya que eso te garantiza el monitor que si no tiene para darle los dos tenedores lo duerme pero lo que vas a tener es que la gran mayoría de los procesos van a estar bloqueados esperando por el monitor. Porque todos van a necesitar usarlo para entrar, salir y encima pedir tenedores que en la gran mayoría de los casos son de gente que ni siquiera está cerca en esa mensa gigante. Eso va a terminar en que solo pocos procesos estén ejecutando a la vez no porque no haya recursos disponibles si no porque están generaste vos un "recurso" más escaso que los que había para manejar y dejaste un cuello de botella en otro lado. En ese caso la solución estaría mal.

Como todo depende de tu realidad, capaz que en cinco es equivalente pero en quinientos vas a tener que buscar otra porque en deifnitiva si bien funciona (no hay deadlock y eventualmente todos van a comer) no es ni de cerca eficiente. A eso me refiero con lo de escalable: capaz que para tu realidad es correcta y una solución válida pero no es escalable porque por más que funciona empieza a generar muy poco uso de CPU que en definitva es lo que se pretende maximizar con la multiprogramación. 

Disculpá la biblia pero quería que quede claro

Saludos!