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

本文关键字:包装 非托管代码 处理器 | 更新日期: 2023-09-27 18:36:26

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

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

我想做的是在同一台机器上运行多个版本,并分布在其他机器上,所以如果我有一个四核盒子,就会有四个应用程序实例正在运行,每个实例都使用一个 CPU。

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

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

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

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

但是,您是否考虑过在单个进程中使用四个线程?线程比进程轻量级得多,这样你就不需要单独的管理服务,也就是说,你将有一个进程(有四个线程)而不是 5 个进程。你来自Unix背景吗?

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

这是一个涵盖该主题的 SO 帖子(我没有投票关闭为重复(尚未),因为我不是 100% 确定这是否正是您所追求的)。