gpt4 book ai didi

c# - 披萨、线程、等待、通知。这是什么意思?

转载 作者:太空狗 更新时间:2023-10-29 20:14:49 26 4
gpt4 key购买 nike

我有两种方法(在 C# 中):

List<Pizza> CookPizza(List<Order>);
List<HappyCustomers> DeliverPizza(List<Pizza>);

这些操作没有共同的对象(除了从一个传递到另一个的比萨饼),并且是线程安全的。它们每个都需要几秒钟的时间来执行,并且它们每个都使用不同的资源( toastr 与汽车)。因此,我想同时运行它们。

如何使用这些约束来组织线程:

  • 我一开始就知道所有订单(比如说,我有 100,000 个)。一个订单可以包含多个比萨饼,在这些比萨饼煮熟之前,我不知道任何订单中有多少比萨饼。 (我知道很奇怪)。通常一个订单有 1 个披萨,但最多可以有 10 个。

  • 有效比萨饼的数量通常不应超过 100 个。这包括新鲜烹制的比萨饼和外卖比萨饼。这是一个软限制,所以我可以超过它一些(例如,当一个大订单被煮熟时)。硬限制可能接近 500。

  • 当分配大量工作时,这两种操作都会更有效率。通常,CookPizza 在至少有 20 个订单时效率最高。提供至少 50 个披萨时,送披萨效率最高。也就是说,如果我为这些方法提供的项目少于这些数量,我将看到性能下降。如果只剩下这些,可以少用一些。

我遇到的主要问题是这些方法可能需要如何相互等待。

  • DeliverPizza 可能需要等待 CookPizza 完成 50 个。
  • CookPizza 可能需要等待 DeliverPizza 将事件披萨的数量减少到 100 个。

最佳答案

我会首先使用基于事件的模型来解决这个问题。

假设我们有一个 PizzaDispatcher 对象,它被赋予了订单。调度程序开始调用 CookPizza,并从初始空状态开始调用一定数量的订单。比萨饼煮好后,CookPizza 函数会通知调度员比萨饼已煮熟(可能通过您作为参数提供的回调)。当披萨送达时,DeliverPizza 函数执行相同的操作。

PizzaDispatcher 现在将有足够的信息来根据已煮熟的比萨饼的数量和未完成的交付来决定何时和多少比萨饼应该上交 cooking 或交付。

这可以重构为使用事件而不是回调等,但我发布它是为了想法,而不是实现的细节。

关于c# - 披萨、线程、等待、通知。这是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5621282/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com