任何技术的诞生都不会凭空出现,都是有相应的历史起源 发展 和经历
下面我们先来看下这位老哥 Node.js 之父 Ryan Dahl
Ryan Dahl 现在是 Google Brain 的一个软件工程师。他是 Node.js 之父现在他从事深度学习研究项目,工作重点是彩色化和超分辨率等图像转换工作。他曾经贡献过几个开源项目,包括 HTTP Parse、libuv
node的诞生
Ryan Dahl的经历比较奇特他并非科班出身的开发者,在2004年的时候他还在纽约的罗彻斯特大学数学系读博士,期间有研究一些分形、分类以及p-adic分析,这些都跟开源和编程没啥关系
2006年 他有了『世界那么大,我想去看看』的念头,做出了退学的决定,开始了一些通过云的研究来进行他的工作,使用 Ruby on Rails 为滑雪板公司开发网站是他的正式编程生涯的开始,(后面的事件发展大家可以自己。。。)
直到2008年Chrome 发布,并且同时发布了 V8 JavaScript 解释器。这是一个很棒很厉害的运行环境。 V8 发布后,Ryan Dahl开始对它进行分析,它看起来迷人而且干净,而且很快,突然之间Ryan Dahl想到:JavaScript 是单线程的,而且已经实现了非阻塞 ,但在 web 浏览器中人们使用 AJAX 请求和事件时已经实现了非阻塞请求 这有点儿讽刺
Ryan Dahl认为JavaScript 结合异步 IO,再结合一些 HTTP服务器事件,将会变成一件非常酷的事情所以在接下来的四年里一直在做这项工作
2009年的2月,按新的想法他提交了项目的第一行代码,这个项目的名字最终被定名为“node”
Ryan Dahl在柏林举行的JSConf EU会议上发表关于Node.js的演讲,之后Node.js逐渐流行于世。
于是Ryan Dahl于2010年加入Joyent
(硅谷的创业公司),全职负责Node.js项目的开发。此时Node.js项目进入了它生命历程里的第二个阶段:从个人项目变成一个公司组织下的项目。
他对node的想法是以非阻塞的方式做所有事情 这样的话可以解决编程过程中遇到的很多问题,比如我们可以完全可以不需要关线程处理,只使用过程抽象和序列化通信就可以完成我们的工作。而且在过程中,完全异步方式可以处理很多很多的请求 这让他很坚信这个观点这种方式是很好的(很久之后当Ryan Dahl 遇到了Go 的时候他改变了他原来的想法 因为Go拥有合适的绿色线程和易于使用的抽象,由于Go和操作系统的接口都是绿色线程,也是非阻塞 I/O 。但是,他们给用户的接口是阻塞的,这样的话对于使用者来说是非常友好 例如处理事件 A,等待一个响应或者一个错误;处理事件B,等待一个响应,出错很明显知道做什么遇到什么。但是在 Node 中,这就变得更加困难,因为必须跳转到另一个函数调用多回调操作,虽然node社区的发展对这种方式的处理做的很好的解决方案,但本质是和Go有区别的)
V8
V8 作为一个 JavaScript 引擎,最初是服役于 Google Chrome 浏览器的。它随着 Chrome 的第一版发布而发布以及开源。现在它除了 Chrome 浏览器,已经有很多其他的使用者了。诸如 NodeJS、MongoDB 等
V8作用:把 JavaScript 直译成机器码,然后运行
与传统的「编译-解析-执行」的流程不同,V8 处理 JavaScript,并没有二进制码或其他的中间码 但这中间,往往是一个复杂的过程,它需要处理很多的难题,比如:编译优化 内存管理 垃圾回收 ( 要理解弄懂v8的在后文探讨)
绿色线程(Green Thread)
绿色线程(Green Thread)的意思是,程序里面的线程不会真正映射到操作系统的线程,而是由语言运行平台自身来调度。
总结
本文只是简单描述了一下node的诞生原由和背景
我的博客原由是想通过node系列的博客让自己对node有个更深入的理解,多总结自己的理解,从而写出高质量的代码,也希望大家相互学习探讨
后续博文: