【发布时间】:2012-01-01 23:08:58
【问题描述】:
我已经构建了一个应用程序,用于通过 Amazon SES 为网站发送电子邮件。它是用 C# 编码的。
通过 Amazon SES API 发送每封电子邮件需要 0.3 秒。 这意味着,使用单线程应用程序,我每秒只能发送 3 封电子邮件。
我已经实现了一个生产者/消费者、多线程应用程序,其中 1 个生产者为每个客户查询自定义电子邮件,以及 25 个消费者从队列中拉出并发送电子邮件。
我的多线程应用程序每秒发送 12 封电子邮件(速度提高了四倍)。我本来预计 25 线程应用程序的速度会更快。
我的问题是: 在单处理器机器上发送邮件的速度究竟能提高多少?我的收益是否合理,或者我的速度问题更有可能是由于编码而不是计算机无法快速处理电子邮件?
提前致谢!
更新: 如果其他人面临同样的问题....连接到 AWS 以发送电子邮件会占用大量时间。 AWS 开发人员论坛上的以下主题提供了一些见解(您可能需要向下滚动才能找到更有用的帖子)。
【问题讨论】:
-
根据我对多线程的理解,它可以处理多个任务,但仍然需要相同的时间。所以我认为使用多线程不会节省大量时间。但是,如果在发送电子邮件时仍需要访问 UI,则可以使用多线程。
-
你的系统有多少个内核?
-
在典型的邮件发送期间队列计数会发生什么变化?看看生产者线程是否优于电子邮件发送者可能会很有趣。可能每秒将 P-C 队列计数转储到计时器上的屏幕上。
-
@MartinJames 是的,生产者线程的性能远远优于消费者......生产者仅在发送了几封电子邮件后就完成了电子邮件的格式化。
标签: c# multithreading performance amazon-web-services producer-consumer