node.js不为每个客户连接创建一个新的线程,而仅仅使用一个线程。当有用户连接了,就触发一个内部事件,通过非阻塞i/o、事件驱动机制,让node.js程序宏观上也是并行的。使用node.js,一个8gb内存的服务器,可以同时处理超过4万用户的连接。
由于node.js中采用了非阻塞型i/o机制,因此在执行了访问数据库的代码之后,将立即转而执行其后面的代码,把数据库返回结果的处理代码放在回调函数中,从而提高了程序的执行效率。
当某个i/o执行完毕时,将以事件的形式通知执行i/o操作的线程,线程执行这个事件的回调函数。为了处理异步i/o,线程必须有事件循环,不断的检查有没有未处理的事件,依次予以处理。
在node中,客户端请求建立连接,提交数据等行为,会触发相应的事件。在node中,在一个时刻,只能执行一个事件回调函数,但是在执行一个事件回调函数的中途,可以转而处理其他事件(比如,又有新用户连接了),然后返回继续执行原事件的回调函数,这种处理机制,称为“事件环”机制。
node.js底层是c++(v8也是c++写的)。底层代码中,近半数都用于事件队列、回调函数队列的构建。用事件驱动来完成服务器的任务调度,这是鬼才才能想到的。针尖上的舞蹈,用一个线程,担负起了处理非常多的任务的使命。
node.js适合用来开发什么样的应用程序呢?
善于i/o,不善于计算。因为node.js最擅长的就是任务调度,如果你的业务有很多的cpu计算,实际上也相当于这个计算阻塞了这个单线程,就不适合node开发。
当应用程序需要处理大量并发的i/o,而在向客户端发出响应之前,应用程序内部并不需要进行非常复杂的处理的时候,node.js非常适合。node.js也非常适合与web socket配合,开发长连接的实时交互应用程序。
node.js不是一种独立的语言,与php、jsp、python、perl、ruby的“既是语言,也是平台”不同,node.js的使用javascript进行编程,运行在javascript引擎上(v8)。
以上就是node.js底层是什么语言的详细内容。
