我正在研究使用 .NET 编译的 MATLAB 程序集(使用 Matlab 编译器运行时获得)来同时(以多线程方式)执行多段代码的可能性。
我的代码读取
Thread t = new Thread(new ThreadStart(
() =>
{
dotnetclass AClass_1 = new dotnetclass();
Stopwatch sw = new Stopwatch();
sw.Start();
AClass_1.math_on_numbers(2, a, b);
sw.Stop();
Console.WriteLine("Elapsed (1): " + sw.Elapsed);
}));
Thread t2 = new Thread(new ThreadStart(
() =>
{
dotnetclass AClass_2 = new dotnetclass();
Stopwatch sw = new Stopwatch();
sw.Start();
AClass_2.math_on_numbers(2, a, b);
sw.Stop();
Console.WriteLine("Elapsed (2): " + sw.Elapsed);
}));
t.Start();
t2.Start();
其中 dotnetclass
在 MATLAB .NET 程序集中定义,函数 math_on_numbers
执行一些虚拟数学运算并在返回前 hibernate 3 秒。
执行上述代码,我在 3 秒后观察到“Elapsed (1)”消息,并在 6 秒后观察到“Elapsed (2)”消息。这让我认为对 MATLAB 运行时的并发调用将始终以单线程方式排队。
我的问题:
有没有办法在这种情况下允许多线程?
在其他框架中(我对 Java 环境特别感兴趣),还会出现此限制吗?
最佳答案
你们有 MATLAB 并行计算工具箱吗?您可以将其与 MATLAB 编译器结合使用来生成 .NET 程序集,这些程序集可以使用本地计算机上可用的处理器内核或通过将作业提交到集群来执行并行计算。否则,您的 MATLAB 代码将按顺序运行。顺便说一句,并行计算工具箱基于 MPI,并被构造为对“作业”和“任务”进行操作。线程是一种低级抽象,更难正确使用。
关于c# - MATLAB 编译的 .NET 程序集中的多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7476880/