gpt4 book ai didi

.net - 我们应该使用自己的线程还是线程池来执行小型且频繁的任务?

转载 作者:行者123 更新时间:2023-12-03 13:17:51 25 4
gpt4 key购买 nike

在我的应用程序中,我有一组插件-当应用程序中发生某些事件时,它们会执行一些小的操作。插件的每种方法都必须在单独的线程中调用,尽管每个插件只能同时运行一种方法。

我可以使用两种方法来实现:

  • 为每个插件创建一个单线程,该线程将处理插件队列中的事件,直到队列为空。然后休眠,直到新事件进入队列,进行处理等等。
  • 当事件进入插件的队列时,将在线程池线程中对其进行处理。当队列为空时,将其释放回线程池。

  • 问题是: 两种方式的优缺点是什么?

    一些说明:
  • 插件在大多数情况下只是等待下一个事件,因此不会过多加载CPU。
  • 我不在乎创建线程所需的时间,插件是长期存在的。
  • 通常每个应用程序有10-20个这样的插件。
  • 最佳答案

    Each method of a plugin must be invoked in a separate thread, though only one method of each plugin can be run simultaneously.



    如果这是您的要求,我会考虑围绕 BlockingCollection<T>构建插件。添加插件时,启动一个长期运行的任务,该任务仅对 foreach执行 BlockingCollection.GetConsumingEnumerable()

    这将允许您将项目添加到其“队列”中,并且插件将自动按顺序处理这些项目,而无需您自己的“ sleep ”处理。每个插件可以只使用 blockingCollection.GetConsumingEnumerable来处理其队列中的项目。

    关于.net - 我们应该使用自己的线程还是线程池来执行小型且频繁的任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9626079/

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