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



我有一个Azure工作者角色在一个非常小的实例中运行。它所做的只是将存储队列中的所有消息出列,并将它们以100为一块的形式插入表存储中。

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

插入到10个表分区中,因此跨分区并行化非常容易。这是我的最佳选择吗?我可以使用PLINQ执行此操作吗?我知道PLINQ根据内核数量优化线程使用,那么在这种情况下,它甚至会生成多个线程吗?如果我使用插入调用的异步版本,当对表存储的调用返回时,这难道不会产生生成多个线程的效果吗?

谢谢!

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

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

最新更新