node.js基于V8引擎和JavaScript语言通过非阻塞I/O和事件驱动实现了一个非常纯正的异步平台,在处理I/O密集型任务时表现出了优秀的性能。但node.js具有两个非常明显的缺陷:一是单线程运行,不能很好的利用多核;二是异步编程,对业务逻辑的表现非常不自然。
go语言通过封装的协程的概念很好的解决了node.js的上述两个问题:首先go语言中的协程通过系统线程的方式并行运行在多个核上;每一个协程是一个独立的执行体,是对node.js中回调的一个很好的包装(在协程中遇到I/O时,会主动让出CPU),通过同步的编程方式达到异步的性能效果,对业务逻辑表现非常自然。
另外,go语言和node.js一样,也是I/O密集任务处理型工具,在具体编程时,尤其注意这一点,倘若在一个四核CUP上运行着有4个协程同时计算大量任务的go程序,后果是其他协程得不到执行,处于假死状态。
从程序员使用语言的角度来说,go语言是对node.js的改进,达到了性能和可维护性的完美结合!