1

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

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

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

谢谢!

4

1 回答 1

2

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

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

于 2012-12-12T15:18:07.440 回答