由于CPU没有变得越来越快但是核心越来越多,因此并行是在桌面应用程序上获得更好性能的方法,但我不确定基于Web的应用程序是否也是如此。
Web服务器已经必须旋转大量线程来处理所有Web请求,因此以并行方式编写应用程序(比如排序,搜索等算法)会有助于提高性能,还是会对它造成伤害呢? / p>
我特别使用ASP.Net,但我认为这个问题适用于任何平台。
答案 0 :(得分:0)
我将假设您正在考虑并行化的任何操作都需要同步完成(排序,搜索):在这种情况下,我不确定它是否总是意味着更好的性能,它可能会降低性能。以下是我的理由。 例如,您的应用程序在托管20多个其他Web应用程序的服务器上运行的环境。如果它在一个线程中,服务器将一次处理它并返回结果。如果将其拆分为并行线程,则某些线程可能会完成,但其他一些线程可能会被卡在其他应用程序的线程后面。因此,即使CPU周期数可能接近相同,总响应时间也会变慢。
但是,如果您的操作可以异步完成(相对繁重的计算,显示的优化算法)我建议在客户端将其拆分为多个请求并触发几个ajax请求,然后由不同的Web提供服务服务器并行(在负载平衡的Web场中)并在客户端将结果混合在一起。
希望有所帮助!
答案 1 :(得分:0)
如果使用服务器CPU - 它可能很有用。 但是使用用户的pc cpu是错误的做法 - 它可能非常危险。
PS我希望msdn blogs上的这篇文章可以帮到你。 [link]
答案 2 :(得分:0)
我会质疑最初的假设。 CPU越来越快。每核心的性能正在提高,但不一定能达到预期的速度。
Web应用程序倾向于按顺序执行许多前端任务...这并不是说某些操作无法从多线程中受益,但它在很大程度上取决于工作负载,它的拆分程度如何。搜索和排序等操作最适合大型数据集,这对于Web应用程序来说并不常见。在许多情况下 - 当涉及大量数据时 - 数据库服务器会在它到达Web服务器之前执行并进行线程化。
更常见的是找到由Web请求触发的后端进程,执行多线程批处理操作。它们通常可以通过批处理的多线程获得非常大的好处,并且可以轻松地分离工作的性质。
如果您的Web应用程序是高度模块化的,例如基于组件的CMS,或者汇集来自多个来源的数据的应用程序,或者执行批量操作的服务,那么多线程可能会带来显着的好处......但是你还要扩大每个请求的足迹。你真的想要一个网络请求占用10个数据库连接吗? (例如)
也许你这样做。我不确定我会:)