【发布时间】:2013-01-23 23:14:05
【问题描述】:
我正在将时事通讯服务从运行 Microsoft.NET 4.5 的 Windows 服务器转移到运行 Mono 3.0.3 的 Linux 服务器。该服务使用亚马逊的“简单电子邮件服务”(SES)通过official .NET SDK(包装了一个REST接口)传递电子邮件。
虽然从 Mono 通过 SES 顺序发送电子邮件结果证明比使用类似硬件的 Microsoft.NET 稍快,但在尝试并行发送多封邮件时,我遇到了严重的性能问题。下面的图表显示了使用不同数量的线程在两个平台上发送 128 封电子邮件所需的时间。如您所见,Mono 上的性能在 8 个线程后迅速下降,而在 128 个线程中,我只收到 HTTP 超时 - 没有发送一封电子邮件。
通过控制台输出进行分析,结果发现第一批“邮件”是减速的根源。有两个线程,每个发送一封电子邮件,两个线程在大约 2200 毫秒内完成。有四个线程,每个线程发送一封电子邮件,它们都在大约 4400 毫秒内完成。 8 个线程,大约 8800 毫秒等。似乎 Web 服务虽然同时产生,但按顺序运行,需要在返回之前相互等待。
任何想法可能会触发此行为? source code for the Amazon SDK 可以在 GitHub 上找到,但我无法查明任何可疑之处。也许在HttpWebRequest 上使用异步方法?
【问题讨论】:
标签: multithreading mono amazon-web-services amazon-ses