c# - MATLAB 编译的 .NET 程序集中的多线程

标签 c# java multithreading matlab

我正在研究使用 .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 运行时的并发调用将始终以单线程方式排队。

我的问题:

  1. 有没有办法在这种情况下允许多线程?

  2. 在其他框架中(我对 Java 环境特别感兴趣),还会出现此限制吗?

最佳答案

你们有 MATLAB 并行计算工具箱吗?您可以将其与 MATLAB 编译器结合使用来生成 .NET 程序集,这些程序集可以使用本地计算机上可用的处理器内核或通过将作业提交到集群来执行并行计算。否则,您的 MATLAB 代码将按顺序运行。顺便说一句,并行计算工具箱基于 MPI,并被构造为对“作业”和“任务”进行操作。线程是一种低级抽象,更难正确使用。

关于c# - MATLAB 编译的 .NET 程序集中的多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7476880/

相关文章:

Python:引发异常且未处理后线程会被终止吗?

c# - 传输大文件 : combining streamed transfer and content-length

c# - 以 "Do"开头的方法名称是否符合某种标准?

java - 在 Java 中合并两个数组列表

java - 如何用一些简短的代码将方法调用转移到另一个线程?

ios - 无法修复 Objective-C ARC 多线程 iOS 应用程序中的特定内存泄漏

c# - 有没有更有效的方法来确定两个实体集合是否包含相同的元素?

c# - 通过共享内存将 C++ char* 传递给 C#

Java 页面对象模型最佳实践 - 新对象

java - 带有通用数组的循环?