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