结合我为 Engineyard 的 Nginx 模块做的一些工作,让我想到如何…让我后退一步。在 Nginx 中,一切都是异步的。因此,当你为它新建一个模块时必须非常小心来保证它是非阻塞的。是的,我想 Chris Neukirchen 的 rack 和 Nginx 使用非阻塞 IO 架构 web 服务器的方法,让我开始思考如何能将这两件事情结合在一起。
Pramod: 现在,你有了结合 Rack 和 Nginx 的想法。你是如何说服自己用未来 6 个月的时间开发可以在服务器端运行 Javascript 的框架,这能大大提高性能吗?
Ryan: 一边是 Rack 的简单 web服务器界面,一边是 Nginx 的异步部分,我一直在想这两个部分。然后2008年Chrome 发布,并且同时发布了 V8 JavaScript 解释器。它应该不算是解释器,它是一个很棒的运行环境。 V8 发布后,我开始对它进行分析,它看起来迷人而且干净,而且很快,突然之间我想到:JavaScript 是单线程的,已经实现了非阻塞。
这有点儿讽刺,但在 web 浏览器中人们使用 AJAX 请求和事件时已经实现了非阻塞请求。哦,哇!我认为 JavaScript 结合异步 IO,再结合一些 HTTP服务器事件,将会变成一件非常酷的事情。我对这个想法感到非常兴奋,在接下来的四年里一直在做这项工作。
Pramod: 是的,JavaScript 与异步I/O 配合的很好。我相信开发人员都在等待看到一个实现这项功能的框架,我好奇的是,在那段时间里,你有导师或者能够相互讨论的人吗?还是只有你一个人。
Ryan:只有我自己,我有一些提供建议的程序员朋友,我的意思是,第一步绝对是我在自己的房间里完成的。但后来,我搬到了旧金山,在 Joyent 工作,在那里我遇到很多非常棒的编程专家。是的,在那之后许给我指导并且为 Node 贡献点子。
Pramod:很好,与我们分享一下开发 Node 的心路历程吧,我知道 Node 从 2009 年开始的,开发经历了很长时间。
Ryan:我觉得至少对于我自己而言,在我的生活中,没有比喜欢并且有坚信的想法更好的事情了。并且我有时间坐下来开发 Node 。我认为 Node 是一个等待发生但是还没做到的想法,别人或许能够做到。但是突然间我相对失业并且有空闲时间,可以不停的工作几个月,而这正是开发初步产品所需要的。这很棒而且很有趣。
Pramod:非常好,这太奇妙了。你确实做的非常棒。Node 建立在“纯异步”编程模型的基础上,你是怎么为 Node 想到这个点子的?
Ryan:是的,我认为那是一个非常有趣的问题。现在已经过去好几年了。从 2012 年或 2013 年开始我没有再进行 Node 开发了。从这点来看,Node 是一个大项目。因此,是的,当初实现 Node 之后,我到处游说人们使用 Node。或许我们处理 I/O 的方式有错,或许我们以非阻塞的方式做所有事情将会解决编程过程中遇到的很多问题,比如我们可以完全忘记线程,只使用过程抽象和序列化通信。但是在一个过程中,完全异步方式可以处理很多很多的请求。那时我坚信这个观点,但是几年之后,我认为这可能不是编程的最终和全部想法。特别是当 Go 出现的时候。
我认为 Go 很早之前就出现了,但我大约在 2012 年第一次听说 Go 。他们有一个非常好的运行环境,具有合适的绿色线程和易于使用的抽象。我认为阻塞 I/O(引号中的阻塞I/O),由于Go和操作系统的接口都是绿色线程,我认为那完全是非阻塞 I/O 。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-69503-2.html
不可逞一念之勇
中华士魄