这段时间闲来无事,正在学习Scala语言。Scala语言,简单的说,就是一种运行在JVM上的具有面向对象和函数式编程特性的语言,具体介绍可以看到官方网站看看。至于当初为什么决定学Scala,还是受到了《多核危机:Scala vs. Erlang》这篇文章的“诱惑”。
为什么现在有关Scala这样的重视并行计算的语言会受到越来越多的关注?我觉得原因有两点:一是性能,二是成本。
性能,很好理解的。企业随着规模越来越大,用户对于系统服务的请求频率也会越来越高。对于企业来说,系统服务的请求响应肯定是越短越好,系统的并发程度肯定是越高越好。但是对于已有的硬件条件、系统框架,性能达到了瓶颈,这时必然要考虑改变已有的一个或者多个因素,以达到性能的再次提升。改变系统的框架、所实现的语言,这是一种解决方案。就像当年淘宝的系统是用perl完成的,结果当系统和用户规模提高时,系统的性能就无法满足要求了,于是淘宝决定把原有系统推翻,改用Java的框架实现,问题得到了解决。现在,已经有一些企业,将原有的系统改为用Scala实现了。
成本,有两个方面吧:硬件成本和开发维护成本。企业花大价钱买了多核的高性能服务器,结果发现使用已有的系统,服务器的资源使用率和性能都不高。或者,可以开发出性能更高的系统,但是开发难度巨大、潜在bug无数、可能迟迟不能交付。这两种关于成本的窘境,可能都是现在许多企业正在面临的,那么大家肯定都会寻找既能充分利用已有计算机硬件资源,开发难度又不大的语言或者某种解决方案。
关于Scala在并行需求下的效率,我目前只是在概念上有所体会,今后要实际用实验测试一下看看,大家可以看看QCon上《并行需求下的Scala和Erlang比较》这篇演讲。
另外,Scala语言的一个特点是函数式编程,可以让我们用更严谨、更不易出错的方式表达问题,解决问题,使我们从平时的命令式语言的思维中跳跃出来,用另一个角度思考问题。说到这,我们还需要思考一下,目前大学里面上的计算机课程,是不是有些落后于目前业界的需求了?当外面的世界早已都是分布式计算、并行计算、多核编程的时候,大学里面的许多课程都还是重点考察学生对于某种语言的语法掌握情况,而不是用某种语言解决现实世界的问题的能力。:(
今后的硬件(服务器、PC、手机、各种嵌入式设备)都是多核的,能够高校利用多核硬件资源、进行高性能并行计算的语言,用到的地方还是会很多的,我看好Scala语言!