目标是在单个Delphi应用程序中将浮点数转换为字符串,以实现可用内核的完全使用.我认为这个问题适用于字符串的一般处理.然而在我的例子中,我特意使用FloatToStr方法.
我正在做什么(我保持这个非常简单,所以在实现方面几乎没有含糊之处):
虽然使用了多个内核,但CPU使用率%总是最大限度地取决于单个内核的数量.我知道这是一个既定问题.所以我有一些具体的问题.
以简单的方式,可以通过多个应用实例来完成相同的操作,从而实现对可用CPU的更充分利用.是否可以在同一个可执行文件中有效地执行此操作?即在OS级别上分配线程不同的进程ID或OS识别的某些等效分区?或者这是开箱即用的Delphi无法实现的?
在范围上:我知道有不同的内存管理器和其他组已经尝试更改一些较低级别的asm锁使用http://synopse.info/forum/viewtopic.php?id=57 但是,我在问这个问题在如此低的水平上不做事的范围.
谢谢
嗨J.我的代码故意很简单:
TTaskThread = class(TThread)
public
procedure Execute; override;
end;
procedure TTaskThread.Execute;
var
i: integer;
begin
Self.FreeOnTerminate := True;
for i := 0 to 1000000000 do
FloatToStr(i*1.31234);
end;
procedure TfrmMain.Button1Click(Sender: TObject);
var
t1, t2, t3: TTaskThread;
begin
t1 := TTaskThread.Create(True);
t2 := TTaskThread.Create(True);
t3 := TTaskThread.Create(True);
t1.Start;
t2.Start;
t3.Start;
end;
Run Code Online (Sandbox Code Playgroud)
这是一个"测试代码",其中CPU(通过性能监视器)最大值为25%(我有4个内核).如果将FloatToStr线路交换为非字符串操作,例如Power(i,2),则性能监视器会显示预期的75%使用率.(是的,有更好的方法来衡量这一点,但我认为这对于这个问题的范围是足够的)
我已经相当彻底地探讨了这个问题.问题的目的是以非常简单的形式提出问题的关键.
我在询问使用FloatToStr方法时的限制.并且询问是否存在可以更好地使用可用内核的实现化身.
谢谢.