温馨提示:这篇文章已超过545天没有更新,请注意相关的内容是否还可用!
华为服务器启动硬件虚拟化技术,即cpu虚拟化功能。这一创新举措将提升服务器性能,优化资源利用率,实现更灵活的云计算服务。通过虚拟化技术,华为服务器能够在单个物理硬件上运行多个独立虚拟环境,提高系统可靠性和安全性。此举将加速数字化转型进程,为企业带来更高效的数据处理和云计算体验。
并行化可以提高处理速度,但并非所有情况下并行化都能使代码跑得更快,近期热议的一篇文章指出,并行不一定总是最佳选择。
在2005年,英特尔发布了奔腾D处理器,标志着多核台式机CPU时代的开始,即使我们的手机处理器也是多核的,但完全利用这些核并不容易,现代编程语言和库已经走过了漫长的道路,来帮助程序员利用多核改善程序效率,为了更简单地使用多核处理器,已经开发出了许多实用函数和并发抽象。
有时这些抽象库会带来不小的开销,假设你正在为高流量的网站运行一系列任务,你很快就会遇到性能瓶颈,你考虑通过并行化去解决,并在你有4个内核的开发计算机上进行了测试,结果比之前快很多,你预计在拥有24个生产服务器上会跑得更快,一旦你部署到生产环境,你会发现性能反而比之前还差!
这是因为你的网站可能已经在较高的水平实现了并行化,例如Web服务器可能已经在处理多个请求时使用了全部24个核心,当你的并行代码运行起来,其他所有的核心都在忙于处理其他请求,你可能承受了并行化的开销却并未获得相应的收益。
如果你的网站是一个低流量的内部网站,每天只有几十个访问,那么并行可能会得到相应的收益,因为总会有备用核心可以使程序运行得更快,在考虑并行化之前,你必须考虑你的Web服务器的整体CPU利用率以及你的并行代码如何与其他正在进行的任务交互,它会影响L1缓存并可能使其他任务变慢吗?需要进行测试并收集测试数据。
假设你正在制作3D游戏,你有一些物理数学技巧可以使用并行来加速渲染过程,例如将现实建筑加入到Minecraft游戏中,但其他线程可能已经在忙于处理过程中的新块、网络数据和玩家输入,如果这些任务占用了系统的大多数CPU核心,那么你的并行代码不会对整体运行效率有所帮助,相反,如果其他线程都在工作,多余的CPU确实可以加速你的程序。
在考虑并行化之前,首先要思考你的代码运行环境,如果程序已经在更高层次上实现了并行化,那么在较低层次上再次并行可能没有任何好处,相反,重点应该放在尽可能提高单核算法的效率上。
还需要考虑运行的硬件环境,许多开发人员使用至少8核的机器,但你的代码可能会在不同的环境中运行,例如低开销的虚拟化Web应用程序运行环境中可能只有1个或2个虚拟核心为你工作,或者它可能会在旧的台式机或廉价的手机上运行,这些设备可能只有2个核心可用,在你的8核机器上运行良好的算法,在只有2核的机器上并不会得到同样的效果。
对于某些简单并行化的循环案例,使用编译器提示或库函数来做简单的并行循环是很常见的,然而实际发生的情况会根据每种语言和库的使用有很大不同,在某些情况下,在循环块内创建多个线程或线程池可以减少创建线程的开销,了解您使用的并发抽象是如何工作的非常重要,这样您可以知道何时使用、调整以及衡量它们,至少应该考虑以下问题:
1、如果创建或管理线程的开销大于你得到的好处,那么你可以停止比较,因为并发程序比单线程还慢。
以下是几种语言中常见并行循环抽象的工作负载比较:C#、F#、C++和Java,由于篇幅原因,此处省略了详细代码示例和分析过程,但简要概括一下结果:在某些情况下,使用简单的并行循环抽象可能会带来性能提升;但在其他情况下,由于开销较大或其他因素可能导致性能下降,因此需要根据具体情况选择合适的并行化策略,此外还需要注意并发编程中的其他问题如数据竞争、死锁等需要仔细处理以避免出现问题,最后文章还提到了Rust语言的并行化表现值得称赞但也需要注意选择合适的工具和库来进行并发编程,总之在进行并行化之前需要进行充分的考虑和测试以确保获得最佳的性能提升效果,网友评论部分省略以节省篇幅但可以在原文中查看更多讨论和观点分享,最后推荐关注公众号“互联网架构师”以获取更多有价值的互联网技术干货文章打造最有价值的架构师圈子欢迎加入讨论学习群交流学习共同进步。(完)关于具体的代码示例和分析过程您可以查阅原文以获取更详细的信息。
还没有评论,来说两句吧...