假设我指定我希望我的工作角色在 4 核虚拟机上运行。如何使用所有内核?
看起来有RoleEntryPoint.Run()
我覆盖的方法来安装我的请求处理程序。
如何处理使用所有内核的请求?我是手动生成线程并将处理委托给它们,还是有一些现成的聪明抽象可以帮助自动完成?
假设我指定我希望我的工作角色在 4 核虚拟机上运行。如何使用所有内核?
看起来有RoleEntryPoint.Run()
我覆盖的方法来安装我的请求处理程序。
如何处理使用所有内核的请求?我是手动生成线程并将处理委托给它们,还是有一些现成的聪明抽象可以帮助自动完成?
生成线程或使用 .Net 4 Tasks 让 .Net 使用线程池安排您的作业。
您应该在 WorkerRole::OnStart() 中添加多个工人,如此处所述http://www.31a2ba2a-b718-11dc-8314-0800200c9a66.com/2010/12/running-multiple-threads-on-windows.html
+1 to Oliver - 在每个请求上生成 TPL 任务,框架运行时应该从那里处理所有事情。
让所有 4 个核心保持忙碌的另一种方法是将应用程序扩展到 Web 角色的多个实例,这样每个核心都在其实例中运行(请注意,在 Windows Azure 中,每个实例都在其自己的虚拟机中运行)。由于在 Windows Azure 中您按小时为每个核心付费,因此在 4 个 Worker Role 实例中的每一个上使用一个核心的成本与在单个 Worker Role 实例上运行 4 个核心的成本相同。
使用 4 个 Worker Role 实例的好处是您可以更方便地调整为 3 个、2 个或 10 个实例,具体取决于您在任何时间点需要承担的计算量。更改运行实例的数量很容易 - 您无需重新部署应用程序。要更改实例的大小,您需要重新部署。此外,只有实例大小的粒度较小:部分、1、2、4 和 8 个核心。没有实例大小,例如 6 个内核。
另请注意,如果您只有一个实例,则 Windows Azure SLA 无效。在各种 SLA 启动之前,至少需要 2 个实例。这部分是为了让 Azure 的 Fabric 控制器可以更新应用程序的某些部分(例如使用 O/S 补丁),而无需关闭整个应用程序。
警告:对于未考虑到云而设计的遗留代码,可能会出现在运行多个实例时无法正常运行的代码。换句话说,它不能有效地“向外扩展”;在这种情况下,您可以通过在更大的实例大小(例如 4 核)上运行它来“扩大规模”。