gpt4 book ai didi

sql-server - 如何在Delphi中使用多线程设计请求处理?

转载 作者:行者123 更新时间:2023-12-02 22:42:50 29 4
gpt4 key购买 nike

我对多线程应用程序的架构和设计不熟悉。

下面的案例我该如何设计,如果有设计模式就更好了。

我们需要设计一个可以执行以下操作的 Windows 服务。

SQL Server 数据库有两个表,分别称为“组织”和“事件”表,分别保存组织列表和该组织中发生的事件列表。

Windows服务需要异步处理每个组织的事件。Windows 服务从组织表中读取组织列表,并为每个组织创建一个线程。每个组织线程每 2 秒轮询一次事件表,将事件读入事件列表。当事件列表中放置/可用某些内容时,必须调用另一个对象(调度程序),并且调度程序对象创建并运行一个事件处理程序线程来处理每个事件。一旦事件被处理,事件处理线程应该被终止。

事件可以有多个源,将事件放入事件列表中。

使用 Delphi 2009 和 SQL Server 2008 Express 版本。

请帮忙。

最佳答案

为什么要为每个组织创建一个主题?我能想到的唯一原因是当您希望能够为每个组织配置不同的轮询时间时。否则,我只有一个轮询线程来获取自上次轮询以来的所有事件并处理这些事件。

为了处理事件,您可以使用队列和工作池来处理它们(看看 OmnithreadLibrary ,因此处理事件(这可能很耗时,我不知道)可以是多线程的。

如果您愿意,您可以确保每个组织仅同时处理一个事件,尽管您可能想知道这是否有意义。

所以,我会:

  • 1 个轮询线程来获取新事件并将其放入队列中。
  • 1 个队列用于处理这些事件。
  • 处理队列的工作线程数量任意,最好基于 CPU 核心数量而不是组织数量。

如果您需要在整个组织内进行事件消息传递,您可能还需要看看 RabbitMQ 这样的工具。 。获取事件并立即将它们放入 RabbitMQ 中可能是一个好主意,之后该工具就可以分发它们。

关于sql-server - 如何在Delphi中使用多线程设计请求处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17361251/

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