node.js的前世今生 (诞生记)

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_24884955/article/details/86591766

任何技术的诞生都不会凭空出现,是有相应的历史起源 发展 和经历

下面我们先来看下这位老哥   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有个更深入的理解,多总结自己的理解,从而写出高质量的代码,也希望大家相互学习探讨

后续博文:

node.js概念和特点

node.js本质核心

node.js运行原理源码解读

node.js使用场景及案例分析

展开阅读全文

征友启事——前世今生

07-02

很久以前开始做这样的梦,那种感觉似远似近,是乎好熟悉,但却又不能看清其中。我想人都有潜意识里的某种熟悉,模糊不清,怎么也探不清其中奥秘。 rnrn 我梦见,我的前世是在古代的某个朝代,我的父亲是朝中重要的议政大员,我是家中的独生女,过着衣食无忧的大小姐生活,身边还有很多下人围着,跟其它小姐一样,我琴棋书画样样通,而且生得水灵漂亮,我是父亲的掌上明珠,但我也免不了成为政冶的牺牲品,很早,父亲就把我许给了朝中一位亲王的儿子。我心中苦于无耐,但又无能为力,两家商量好在我20岁时完婚。 rnrn 正当我18岁时,不料有一次父亲无意中得罪了另一位皇亲,从此结下仇怨,这就是我们家中落的开始,终于有一天,父亲被皇上抄家了。记得那是一个晚上,我正要睡下,外面来了很多官兵,到我们家见人就杀,把我父亲抓了起来,捆走了,把剩下的下人,家人全都杀了,只见当时房子烧起来了,我站跑出来见此景,没有任何思想的呆在原地,动也不动的看着眼所发生的一切。正当一个官兵快砍向我的时候,我闭上眼睛,接受死的来临! rnrn 当我睁开眼时,我已经被一条强有力的胳膊抱着,遗憾的是我至始至终,都没有看清他的脸,熟悉陌生的感觉,只觉得自已认识他,而且很爱他,但我叫不出他的名字,他带我走了,我们去了很远的地方,再也没有再回来了。很多次梦里都会兵荒马乱的,场景危险而乱,总是在我有危险的时候,他就会出现,他就会带我离开,我从未看清他的脸,也不知道他的名字,但总觉得自已很爱他,这种感觉说不清楚的熟悉。 rnrn 很多次,我总想努力看清他的面孔,在梦里问问他叫什么名字?而我们之间到底又是什么关系呢?如果真有前世,我想我是幸福的,因为总有他在守护着我,在梦里我总是那么安心踏实,一点也不害怕。人都会在遇到某件事,某个人,会产生那么一两秒熟悉的感觉,这是人们常说的“似曾相识”总是在做某件事情的时候,意识里好像从前在同一个地方,同一些人,做过同一样的事情,也许是人潜意识里留下的某种片段吧!而它从未间断过.....rnrnrn如果有缘和你相见,我心已足! 论坛

DoModal的前世今生

11-04

-----------------------------------------rnNO.1:首先,DoModal()会使用对话框模板名来从应用程序的资源文件中查找、载入并锁定对话款模板。如果DoModal()不能定位资源,则返回错误代码-1rnrnNO.2:然后,这个函数会调用PreModal()。PreModal会执行一些安全检查,然后为对话框查找父句柄(会通过CWnd::GetSafeOwner)。然后将结果保存在m_hWnd中。rn之后,它会调用EnabledWindow(FALSE)来冻结父窗口,强制式模态化~rnrnNO.3:然后他会准备将一个MFC对象粘贴到对话框中,通过AfxHookWindowCreate(注意MFC安装的CBT钩子)。然后调用CWnd::CreateDlgIndirect()。这个函数是没有在MSDN中记录的~所以要靠你自己看源代码领悟rn如果CreateDlgIndirect成功,DoModal就调用CWnd::RunModalLoop开启消息泵,这个消息泵一直等到用户按下OK或者Cancel。OnOK和OnCancel都会自己调用EndDialog,然后EndDialog又调用CWnd::EndModalLoop。rn干掉RunModalLoop之后,DoModal会调用SetWindowPos隐藏已经被废掉的窗口,然后用EnabledWindow(TRUE)来激活父窗口,然后再调用SetActiveWidnow确保父窗口被激活rnrnNO.4:最后,DoModal会调用DestroyWindow销毁窗体,然后调用PostModal,这个函数会通过Detach分离C++对象和Windows句柄(CWnd的知识),然后将m_hWndTop设置为NULL。rn然后在释放一些资源,清理一些东西,然后就返回RunModalLoop的返回值~rnrn--------------------------------------rn以上就是DoModal的运行机制,请结合MFC的源代码~代码在DLGCORE.CPP中rn 论坛

没有更多推荐了,返回首页