使用多个处理器包装非托管代码

时间:2012-06-07 15:28:25

标签: c# c++ multiprocessing load-balancing

我有一个用c ++编写的现有应用程序,它目前执行许多任务,从数据库中读取所有客户的transactiosn,处理它们并将结果写回来。

我想要做的是在不同的机器上并行运行多个版本以增加交易容量,方法是为每个版本的应用程序分配一定数量的客户,这样就不需要争用或数据共享,因此没有锁定或同步。

我想要做的是在同一台机器上运行多个版本以及分布在其他机器上,所以如果我有一个四核盒子,那么应该运行四个应用程序实例,每个实例使用一个CPU

我将把c ++代码包装在.NET c#接口中并管理所有这些进程 - 本地和分发来自负责创建,启动和停止进程的父c#管理服务,以及它们之间的所有通信和管理。

我想知道的是,如果我在四核盒上的单独后台线程上创建四个实例,无论CLR和.NET是否会自动负责将负载分散到每个盒子上的四个CPU上,或者我是否需要做一些事情来利用并行处理能力?

2 个答案:

答案 0 :(得分:1)

您可以通过Process对象(或ProcessThread启动流程时设置流程相关性,具体取决于您启动应用的方式。)

Here is an SO post涵盖了主题(我没有投票以复制方式关闭(但是)因为我不能100%确定这是否正是你所追求的。)

答案 1 :(得分:1)

如果您的意思是您将在同一个盒子上的四个进程中运行您的应用程序,那么操作系统(Windows)将控制这些进程如何分配CPU时间。如果这些过程正在进行类似的工作,那么通常它们将获得大致相等的处理器时间。

但是,你考虑过在一个进程中使用四个线程吗?线程比进程轻得多,然后您就不需要单独的管理服务,即,您将拥有一个进程(具有四个线程)而不是5个进程。你有机会来自unix背景吗?

相关问题