- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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.
输出从1
到10
的十个数字。
事实上,步幅参数允许您调整性能。并行 for 循环使用线程池来调度工作。如果工作数据包非常小,那么线程池内的同步开销可能会影响性能。解决这个问题的方法是确保工作数据包足够大以控制同步开销。
大步走可以让你实现这一目标。在您的示例中,循环索引值 1 和 2 作为一项工作执行。索引值 3 和 4 是另一项工作。等等。通过将多个索引分组到单个工作中,可以减少同步开销所花费的时间。
关于multithreading - TParallel.For 中的 ASride 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27206147/
我想使用 TParallel.&For例如,循环计算 1 到 100000 之间的素数,并将所有这些素数保存在 AList: TList 中: procedure TForm1.Button1Clic
给出以下在一维数组中查找奇数的简单任务: begin odds := 0; Ticks := TThread.GetTickCount; for i := 0 to MaxArr-1 do
我需要填充 TJsonArray有很多TJsonObject ( TJsonArray 和 TJsonObject 来自 JsonDataObjects )。我正在尝试 TParallel.For()
我正在尝试 Delphi XE7 Update 1 的并行编程功能。 我创建了一个简单的 TParallel.For 循环,它基本上执行一些虚假操作来打发时间。 我在 AWS 实例 (c4.8xlar
TParallel.For() 有一个名为 AStride 的参数。就我而言,AStride 是 2: TParallel.&For(2, 1, 10, procedure(index:
我是一名优秀的程序员,十分优秀!