百科问答小站 logo
百科问答小站 font logo



Node.js、Scala、Clojure 等声称适合高并发的语言,分别具体适用于什么情景,何种任务? 第1页

  

user avatar   rongshen 网友的相关建议: 
      

Node.js的高并发,是基于没有并发完全依赖异步回调的方式来实现的。和其它方式相比,是彻底没有Context-Switch的成本。代价就是你需要习惯回调式编程,这对习惯了同步编程的程序员来说刚开始是有障碍的。

但是Node.js带来的好处非常明显,它能达到并发性能仅仅跟你自己的实现逻辑有关,和底层架构的关系很小。这一点在做性能测试的时候非常明显,高并发的成功率高,黑盒子少,定位性能问题容易。

Node Cluster Module以Fork工作进程的方式提供了利用多核利用能力,实际测试下来,如果IO不是大问题,也能获得几乎线性的性能提升。

极度简单,所以可靠、高性能和易于维护。


user avatar   jeffz 网友的相关建议: 
      

我觉得吧,说这话的人估计只是看到了几篇描述,然后就把东西混在一起了。我相信这些语言/环境对自己的描述下面都有并发(concurrent或concurrency)字样,但上下文是不同的。


通俗地讲,这里并发要分两种,一种叫做“吃IO”,一种叫做“吃CPU”,其中前者在目前的环境下变得越来越单指“网络IO”了。


Node.js显然是吃IO的,它的卖点便是可以单,进程接受多少多少个连接,可以用很少的资源吃满IO,这里的资源的重点自然是指内存和CPU。


Scala和Clojure和Node.js完全是两码事,他们吃IO的能力完全是靠JVM决定的,JVM给个擅长吃IO的机制,比如nio还是aio什么的,然后有人写了方便吃IO的框架比如mina或netty什么的,这才是决定Scala或Clojure这种JVM上的语言吃IO能力的关键。


这里说Scala或Clojure这门“语言”时,真的是在说语言,所以说的是它提供的编程模型的能力,例如STM或者Actor等等。你说Java这门傻语言就做不到么?当然能做,不过又丑又烦导致没人想去这么用而已。这些编程模型的目的就是让人可以轻松地乐意地去写出高并发程序。这里的高并发就更倾向于吃CPU了,我可以很简单地写出一个简单程序,4核能跑,32核也能跑。当然它也能吃IO,只是没什么可多说的。


至于Node.js,首先它不是语言是JVM这样的运行环境,其次它没法用来做吃CPU的程序。你开N个进程不叫吃CPU,叫做各自完成独立任务。用Akka那可是可以用来绘制出一副复杂的拓扑结构,计算在Actor之间丢丢丢,它自动算算算。


总之就是个把不同东西扯在一起的蛋蛋说法。




  

相关话题

  为什么有些编程语言写完一句后要加分号? 
  Golang 的 goroutine 是如何实现的? 
  Node.js、Scala、Clojure 等声称适合高并发的语言,分别具体适用于什么情景,何种任务? 
  现在的编程语言越来越多,为什么 C 和 C++ 还没有被现在的时代淘汰呢? 
  新程序员如何向英文社区(如github)进阶? 
  在大型项目上,Python 是个烂语言吗? 
  为什么有人可以看技术书很快? 
  C# 或者 SQL Server 生成的 GUID 有没有可能重复? 
  不同编程语言的程序员之间有鄙视链么? 
  为什么说 Java 比 C / C++ 慢? 

前一个讨论
现在的中国有哪些技术是处于世界领先水平的?
下一个讨论
女生被强吻时是什么感受?





© 2025-03-04 - tinynew.org. All Rights Reserved.
© 2025-03-04 - tinynew.org. 保留所有权利