I tienen dos métodos (en C#):Pizza, Enhebrado, Esperando, Notificar. Qué significa eso?
List<Pizza> CookPizza(List<Order>);
List<HappyCustomers> DeliverPizza(List<Pizza>);
Estas operaciones no tienen objetos comunes (aparte de las pizzas que se transmiten de uno a otro), y son thread-safe. Cada uno de ellos toma varios segundos para ejecutarse y cada uno usa diferentes recursos (horno frente a automóvil). Como tal, quiero ejecutarlos al mismo tiempo.
¿Cómo organizo el roscado con estas restricciones:
Sé que todos los pedidos en el inicio (por ejemplo, tengo 100.000 de ellos). Una orden puede consistir en varias pizzas y no sé cuántas pizzas hay en una orden hasta que esas pizzas estén cocidas. (extraño, lo sé). En general, un pedido tiene 1 pizza, pero puede haber hasta 10.
El número de pizzas activas generalmente no debe superar las 100. Esto incluye las pizzas recién horneadas y las pizzas que se entregan. Este es un límite suave, así que puedo excederlo un poco (por ejemplo, cuando se cocinó una gran orden). El límite difícil es probablemente más cercano a 500.
Ambas operaciones son más eficientes cuando se les da mucho trabajo. En general, CookPizza es más eficiente cuando se le dan al menos 20 pedidos. La entrega de pizza es más eficiente cuando se le dan al menos 50 pizzas. Es decir, veré la degradación del rendimiento si doy menos elementos a esos métodos que esos montos. Está bien usar menos elementos si eso es todo lo que queda.
El problema principal con el que estoy luchando es cómo los métodos pueden necesitar esperar el uno del otro.
- DeliverPizza podría tener que esperar a que se complete CookPizza 50.
- CookPizza podría tener que esperar en torno a DeliverPizza para reducir el número de pizzas activos a 100.
¿Los métodos deben tener esas firmas? – jgauffin
+1 si hizo clic en este enlace debido a la palabra PIZZA –
@jgauffin, no. ¿Qué tienes en mente? –