我们有一个数据库服务器应用程序,它由以下组件组成: 1) 一个带有接受网络服务调用的数据库的服务应用程序 2) 向服务应用程序发出 Web 服务请求以获取某些工作的工作应用程序 (exe)。然后它会做一些工作并直接更新数据库,然后调用另一个 Web 服务请求让服务应用程序知道工作已经完成。
我们运行许多工作应用程序(换句话说,多次运行可执行文件,因此有多个实例在运行),因此每个应用程序都可以从服务应用程序请求工作并继续工作,而不会受到其他工作应用程序的干扰。
如果我将此应用程序移动到具有多个内核的机器上,是否有一种方法可以将工作应用程序拆分到不同的内核上,同时在不同的内核上拥有一个服务应用程序?
由于我多次运行同一个应用程序工作线程,除了放入一些代码来检查它有多少实例在不同的内核上运行之外,我看不出我该如何做到这一点。
在过去的测试中,我看到所有工作应用程序和服务应用程序都在同一个内核上运行,当我有 3 个内核什么都不做时,它已经达到了极限。
有什么想法吗?
京东。
最佳答案
手动强制每个应用程序在特定核心上运行不是一个好主意。 存在多个问题。
如果你转移到另一台有两个内核的机器上怎么办(更改代码不是一个好主意)。
您将为您的应用程序造成瓶颈,因为操作系统还有其他系统任务,同一台机器上还有其他应用程序,您在核心 3 上的应用程序正在等待时间片,而核心 2 是空闲的,但是您告诉 OS
在核心 3 上运行它。您无法控制外部因素。请记住,OS
将使用复杂的算法进行任务调度,并且很难比 OS
做得更好。
我建议在您的应用程序中使用 .NET 4.0
的 Task Library
。它将决定如何以有效的方式使用机器的多个内核。
关于c# - 如何让服务器应用程序使用单独的核心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4448566/