gpt4 book ai didi

multithreading - TParallel.For 中的 ASride 是什么意思?

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

TParallel.For() 有一个名为 AStride 的参数。就我而言,AStride 是 2:

  TParallel.&For(2, 1, 10,
procedure(index: Integer)
begin
TThread.Queue(nil,
procedure
begin
memo1.Lines.Add(index.ToString());
end
);
end
);

我无法理解这里“AStride”的技术含义。AStride = 2 是否意味着第一个线程将处理 [1..10] 范围内的两个连续数字,第二个线程将处理下一个连续数字等?

** 英语不是我的母语,我将“Stride”翻译为“长步”或“步伐”。

最佳答案

人们可能会认为答案可以在 documentation 中找到。 :

AStride: The Integer that represents the increment of the loop iteration.

我认为这意味着循环变量值为 1、3、5、7 和 9。但事实并非如此。该程序:

{$APPTYPE CONSOLE}
uses
System.Threading;

var
Lock: TMonitor;
LockObj: TObject;

procedure Proc(Index: Integer);
begin
Lock.Enter(LockObj);
Writeln(Index);
Lock.Exit(LockObj);
end;

begin
LockObj := TObject.Create;
TParallel.&For(2, 1, 10, Proc);
end.

输出从110的十个数字。

事实上,步幅参数允许您调整性能。并行 for 循环使用线程池来调度工作。如果工作数据包非常小,那么线程池内的同步开销可能会影响性能。解决这个问题的方法是确保工作数据包足够大以控制同步开销。

大步走可以让你实现这一目标。在您的示例中,循环索引值 1 和 2 作为一项工作执行。索引值 3 和 4 是另一项工作。等等。通过将多个索引分组到单个工作中,可以减少同步开销所花费的时间。

关于multithreading - TParallel.For 中的 ASride 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27206147/

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