我们现在在网络上有一台服务器专门用来运行算法,这个算法为matlab自动生成的dll文件,或者为单一matlab进程。算法的调用由c#实现。调用请求按照紧急程度分为2种,一种需要尽快返回结果,一种可以排队,不需要立刻返回。
但是实际过程中发现,不管算法由哪种方式提供,c#分线程进行调用的时候,都会在算法处排队。c#调用dll排队是因为dll在c#进程中只被复制一次,因此多个线程访问的都是同一方法。c#调用matlab进程排队是因为matlab只有单一进程,来自c#的计算请求会一个个进行。不管是哪种方式,发现cpu使用率都很低。
现在云提供商,升级服务器的时候都是把机器变成更多核心的,但是对于这种单方法的服务器来说,似乎无法提高运算速度(matlab内部对于for loop做bash计算另说)。有没有办法提高cpu使用率呢?或者让这个机器,能够多个同一方法同时调用?
我想到一个非常不规范的办法,不知是否可行。请大家提供建议! 将同一方法在dll中做上几个,每个函数名不同,然后c#在分出线程调用的时候,就可以同时跑‘同一’方法了(虽然函数名不同,但内容是一样的)。