Delphi中线程的概念方法

Mat*_*hou 5 delphi iteration multithreading

2 多年前,Remy Lebeau给了我关于 Delphi 线程的宝贵提示。他的回答对我很有用,我觉得我在他的帮助下取得了很大的进步。这篇文章可以在这里找到。

今天,我现在面临一个关于线程的“概念问题”。这与代码无关,而是与针对某个问题应该选择的方法有关。我知道我们不应该征求个人意见,我只是问,从技术角度来看,这些方法中的一种是否必须避免,或者它们是否都可行。

我的应用程序在数据库中有一个唯一产品编号(命名为 SKU)的列表。使用这些 SKUS 查询 API,我得到一个 JSON 文件,其中包含有关这些产品的详细信息。处理此 JSON 文件并将结果显示在屏幕上,并保存在数据库中。因此,在一个步骤中,涉及下载过程并在工作线程中执行。

我看到整个过程可能有两种不同的方法:

  1. 当用户单击开始按钮时,将触发查询,根据用户条件构建 SKU 列表。然后构建一个 Tstringlist,对于列表的每个元素,启动一个线程,下载 JSON,将结果发送回主线程并终止。

这可以被描绘成这样:

在此处输入图片说明

  1. 当用户单击开始按钮时,将触发查询,根据用户条件构建 SKU 列表。不是将 SKU 编号一个接一个地发送给工作线程,而是发送整个列表,工作线程遍历列表,将显示和保存的结果发送回主线程(通过同步事件)。所以我们只有一个工作线程在终止之前处理整个列表。

这可以被描绘成这样:

在此处输入图片说明

我对这两种不同的方法进行了编码,它们都有效……我所经历的每一种方法都有其缺点。

我不是专业的开发人员,这是一种爱好,在我进一步走上一条或另一条“抛光”之路之前,我想知道,从技术角度并根据您的知识和经验,我描述的方法应该避免以及为什么。

谢谢你的时间

马蒂亚斯

Dav*_*ovo 2

在这种情况下要考虑的另一件事是生成 JSON 的 API 的延迟。例如,如果往返服务器需要 30 毫秒,在服务器上创建 JSON 需要 0.01 毫秒,则每个请求查询单个 JSON 记录,即使每个请求位于不同的线程中,也不会导致很有道理。在这种情况下,明智的做法是减少对服务器的请求,在每个请求上返回更多数据,并将结果划分到不同的线程中。

另一件事是线程并不能解决所有问题。我想问为什么你需要将每个 sku 分成一个线程。每个线程运行多长时间以及每个线程执行多少处理?一般来说,创建大量线程,让每个线程工作一小部分毫秒是没有意义的。您希望线程尽可能长时间地处于活动状态,为作业处理尽可能多的数据。您不希望计算机在创建/销毁线程上花费的时间与实际执行有用工作的时间一样多。