7
votes

Pizza, filetage, attente, notifiant. Qu'est-ce que ça veut dire?

J'ai deux méthodes (en C #):

List<Pizza> CookPizza(List<Order>);
List<HappyCustomers> DeliverPizza(List<Pizza>);
  • Je connais toutes les commandes au début (par exemple, j'en ai 100 000 d'entre eux). Une commande peut être composée de plusieurs pizzas et je ne sais pas combien de pizzas sont dans n'importe quel ordre avant que ces pizzas soient cuites. (Wierd je sais). Généralement, une commande a 1 pizza, mais il peut y en avoir jusqu'à 10. P> Li>

  • Le nombre de pizzas actives ne doit généralement pas dépasser 100. Cela inclut des pizzas fraîchement cuites et des pizzas étant livrées. Ceci est une limite douce, je peux donc le dépasser (par exemple, lorsqu'un gros ordre a été cuit). La limite dure est probablement plus proche de 500. P> li>

  • Les deux opérations sont plus efficaces lorsqu'elles reçoivent beaucoup de travail. Généralement, CookPizza est plus efficace lorsqu'il est donné au moins 20 commandes. Livrer la pizza est très efficace lorsqu'il est donné au moins 50 pizzas. C'est-à-dire que je verrai la performance dégrader si je donne moins d'articles à ces méthodes que ces montants. C'est bien d'utiliser moins d'articles si c'est tout ce qui reste. P> li> ul>

    Le problème principal que je vais abriter est de savoir comment les méthodes peuvent avoir besoin de vous attendre. p>

    • Livensizzza peut avoir besoin d'attendre pour CookPizza pour compléter 50. Li>
    • CookPizza peut avoir besoin d'attendre pour livrerpizza pour réduire le nombre de pizzas actives à 100. li> ul> p>


3 commentaires

Les méthodes doivent-elles avoir ces signatures?


+1 Si vous avez cliqué sur ce lien à cause du mot pizza


@jgauffin, non. À quoi penses-tu?


4 Réponses :


0
votes

une pensée

Ajouter une variable de membre à la pizza à piste IS_COOKED. Ensuite, pendant la cuissonzza, définissez ce membre pour vrai lors de la fin, Ensuite, pendant la livraison, vérifiez que le membre avant de continuer.


1 commentaires

Mieux je pense suivre l'état de la pizza par quelle file d'attente il est sur. Lorsque livré, supprimez simplement l'objet de pizza ou la place sur une file d'attente livrée.



4
votes

Vous voulez une tampon simultanée - probablement une file d'attente simultanée, et vous pourriez avoir besoin de plusieurs. Vous voulez une file d'attente simultanée des commandes. Vous appelez COOKODER avec la file d'attente simultanée. Lorsque CookOrder retourne, vous l'appelez à nouveau avec le nouveau contenu de la file d'attente. Ici, vous ne pouvez poster que les 100 premiers articles ou quelque chose si vous voulez. Ici, les commandes sont efficacement par lots par la file d'attente et la vérification est toujours en cours d'exécution. Ensuite, vous répétez à nouveau le processus avec des pizzas.


1 commentaires

J'ai suscité ceci, mais ... simplement avoir une collection Threadsafe n'entraîne pas vraiment avec la signalisation que je dois faire.



4
votes

J'approche ce problème à l'aide d'un modèle basé sur des événements pour commencer.

Disons que nous avons un pizzadispatcher à l'objet qui reçoit les commandes. Le répartiteur commence à appeler cookpizza avec un nombre défini de commandes de l'état vide initial. Lorsque des pizzas sont cuits, la fonction cookpizza notifie le répartiteur qu'une pizza a été cuite (peut-être par un rappel que vous fournissez en tant que paramètre). Quand une pizza est livrée la fonction livringpizza est la même.

Le pizzadispatcher aurait désormais suffisamment d'informations pour décider quand et combien de pizzas doivent être activées pour la cuisson ou la livraison en fonction du nombre de pizzas cuites et de livraisons en suspens.

Ceci peut être refacturé à utiliser des événements au lieu de rappels, etc., mais je le pose pour l'idée, pas les spécificités de la mise en œuvre.


0 commentaires

1
votes

Il semble que tout ce que vous avez besoin est un Pizzamanager qui décide de ce que décide de ce que pizza Pour cuire d'abord, puis les transmet à la Deliveryboy pour eux d'être livrés. Ensuite, une fois que le Deliveryboy délivrepizza , il rapporte-il à la Pizzamanager pour récupérer le prochain pizza . Le Pizzamanager prend en charge toutes les mathématiques liées à l'optimisation de la priorité de laquelle les commandes de cuisson et de livraison. Le Deliverboy aurait probablement le Pizzamanager en tant que délégué .


0 commentaires