这是我参与8月更文挑战的第25天,活动详情查看:8月更文挑战
node.js的基础架构
Node.js是一个让JavaScript运行在服务器端的开发平台,它让JavaScript的使用范围延伸到了服务器端。
但Node似乎和其他服务器端语言比如PHP、ASP、JSP有点不同:
- Node.js不是一种独立的语言,与PHP、JSP、Python、Perl、Ruby的“既是语言,也是平台”不同,Node.js使用JavaScript进行编程,它严格来说是一个工具,语言仍然是JavaScript。
- 与PHP、JSP等相比,Node.js跳过了Apache、Tomcat、Nginx、IIS等HTTP服务器,它自己不用建设在任何服务器软件之上。Node.js的许多设计理念与经典架构(LAMP)有着很大的不同,可以提供强大的伸缩能力。
Node.js最大的特点,是花最小的硬件成本,追求更高的并发,更高的处理性能
node.js的特点
三个最主要特点:
Single Thread,单线程; Non-blocking I/O,非阻塞I/O;Event Driven事件驱动。
这三个特点是相辅相成的,是必须的选择。
-
Node为了在低硬件服务器条件下高并发,所以就减少内存消耗,选择了单线程。
-
必须要非阻塞I/O,因为只有一个线程,当A用户在进行I/O的时候,你必须先去处理B的事情,当B去I/O的时候你要去处理C的事情……A、B、C都有回调函数。
-
为了让A、B、C不乱套,每个人都进行合理调度,谁先来处理谁。不能让B一直等待而去处理C、D、E……所以Node使用了一个机制叫做事件环,采用事件驱动来调度事件
在Java、PHP或者.net等服务器端语言中,会为每一个客户端连接创建一个新的进程。而每个进程需要耗费大约2MB内存。也就是说,理论上一个8GB内存的服务器可以同时连接的最大用户数为4000个左右。要让Web应用程序同时支持更多的用户,就需要增加服务器的数量或者增加服务器的内存数,而Web应用程序的硬件成本当然就上升了。
Node.js不为每个客户连接创建一个新的线程,而仅仅使用一个线程(thread)。当有用户连接了,就触发一个内部事件,通过非阻塞I/O、事件驱动机制,让Node.js程序宏观上也是并行的。使用Node.js,一个8GB内存的服务器,可以同时处理超过4万用户的连接。
另外,单线程带来的好处,还有操作系统完全不再有线程创建、销毁的时间开销。 但是也有坏处,如果因为程序有错误,此时唯一的node进程将停止,此时将会导致所有访问者无法访问。容错性低。