iPa*_*h ツ 11 delphi multithreading parallel-for delphi-xe7
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
);
Run Code Online (Sandbox Code Playgroud)
我在这里无法理解"AStride"的技术含义.是否AStride = 2意味着第一个线程将处理该范围内的两个连续数字[1..10],第二个线程将处理下一个连续数字等?
**英语不是我的母语,我将"Stride"翻译为"long step"或"pace".
Dav*_*nan 12
有人可能会认为答案可以在文档中找到:
AStride:表示循环迭代增量的整数.
我读到这意味着循环变量值是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.
Run Code Online (Sandbox Code Playgroud)
从输出十个数字1来10.
实际上,stride参数允许您调整性能.并行for循环使用线程池来安排工作.如果工作包非常小,则线程池内的同步开销可以支配性能.解决这个问题的方法是确保工作包足够大以支配同步开销.
步幅可以让你实现这一目标.在您的示例中,循环索引值1和2作为一项工作执行.指数值3和4是另一项工作.等等.通过将多个索引分组到单个工作中,减少了在同步开销上花费的时间量.