c# - 如何让服务器应用程序使用单独的核心

标签 c# .net

我们有一个数据库服务器应用程序,它由以下组件组成: 1) 一个带有接受网络服务调用的数据库的服务应用程序 2) 向服务应用程序发出 Web 服务请求以获取某些工作的工作应用程序 (exe)。然后它会做一些工作并直接更新数据库,然后调用另一个 Web 服务请求让服务应用程序知道工作已经完成。

我们运行许多工作应用程序(换句话说,多次运行可执行文件,因此有多个实例在运行),因此每个应用程序都可以从服务应用程序请求工作并继续工作,而不会受到其他工作应用程序的干扰。

如果我将此应用程序移动到具有多个内核的机器上,是否有一种方法可以将工作应用程序拆分到不同的内核上,同时在不同的内核上拥有一个服务应用程序?

由于我多次运行同一个应用程序工作线程,除了放入一些代码来检查它有多少实例在不同的内核上运行之外,我看不出我该如何做到这一点。

在过去的测试中,我看到所有工作应用程序和服务应用程序都在同一个内核上运行,当我有 3 个内核什么都不做时,它已经达到了极限。

有什么想法吗?

京东。

最佳答案

手动强制每个应用程序在特定核心上运行不是一个好主意。 存在多个问题。

如果你转移到另一台有两个内核的机器上怎么办(更改代码不是一个好主意)。

您将为您的应用程序造成瓶颈,因为操作系统还有其他系统任务,同一台机器上还有其他应用程序,您在核心 3 上的应用程序正在等待时间片,而核心 2 是空闲的,但是您告诉 OS 在核心 3 上运行它。您无法控制外部因素。请记住,OS 将使用复杂的算法进行任务调度,并且很难比 OS 做得更好。

我建议在您的应用程序中使用 .NET 4.0Task Library。它将决定如何以有效的方式使用机器的多个内核。

关于c# - 如何让服务器应用程序使用单独的核心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4448566/

相关文章:

c# - 如何在操作中绑定(bind) View 模型子类值?

c# - 将 Classes.FromCasSTLe Windsor 库的Assembly 迁移到 Autofac

c# - 面对序列化问题

c# - 单个 API 类加载其他类的设计模式

C# 连接字符串问题。 EF 代码优先和数据库上下文

c# - 如何根据 C++ 在同一内存位置重新初始化 C# 中的对象(或者它是自动完成的)?

c# - Entry Xamarin Forms PCL 上的边框半径

c# - C# 文件的结构会影响编译的内容吗?

c# - 如何使 .NET 反射与动态生成的对象一起工作?

.net - Windows 7中的AssemblyDescription发生了什么?