在单个核心Azure辅助角色上使用多个线程的原因

时间:2012-12-11 22:48:07

标签: multithreading azure azure-worker-roles

我在一个额外的小实例中运行了一个Azure辅助角色。它只是将所有来自存储队列的消息出列,然后以100块为单位将它们插入到表存储中。

我想知道在插入这些块时是否生成多个线程是有意义的,即使实例只是一个核心。我的想法是因为插入是一个异步过程(尽管我使用API​​调用使它看起来是同步的)可能核心花了大部分时间等待,我可能会通过插入来看到性能提升平行。

插入进入10个表分区,因此跨分区进行并列化非常容易。这是我最好的选择吗?我可以使用PLINQ来做到这一点吗?我知道PLINQ会根据内核数量优化线程使用情况,所以在这种情况下它甚至会产生多个线程吗?如果我使用了插入调用的异步版本,那么当对表存储的调用返回时,是否会产生多个线程的效果呢?

谢谢!

1 个答案:

答案 0 :(得分:2)

你可以产生多个线程,它可能运行得更快。如您所述,大部分时间都花在I / O上,因此CPU可以在它们之间切换。

但是,如果您使用的是.NET 4.5和最新的SDK,则使用异步版本的调用(Begin / End样式调用或较新的DoSomethingAsync()样式调用)将会更好。这些调用使用I / O完成端口,这是处理I / O的一种更有效的方法。可能有一些很好的比较,但我自己的非正式测试发现异步方法快了大约10倍。