[NodeJS源码探秘]之process.binding()

NodeJS是时下非常流行的服务器语言, 这个系列将着重研究NodeJS的源码,以期为之做出贡献。

这篇文章写给初读NodeJS源码的朋友们。process.binding()大概是初读源码时我们最常碰见的函数。现在我们就聊聊它干了什么和它具体的代码。

我们都知道NodeJS的底层是用C++写的。所以一个NodeJS程序从宏观上看有两个世界:JavaScript 以及 C++。在JS中,我们出于追求性能或者结构限制,需要使用C++的代码。在这种情况下,process.binding()就起到了连接C++函数到JS的功能。简单点将,我们可以将它比作require函数。

当然process.binding()不是process模块公开API的一部分。它只在我们bootstrap NodeJS的内部C++函数时使用。

接下来,让我们会看一下其源码。

谷歌V8引擎探秘:基础概念

V8引擎是驱动NodeJS的核心。为此有必要深入了解其API和运行机制。此系列文章旨在记录我自己探索学习V8引擎的记录。

本文章是此系列的第一篇,将梳理一遍V8引擎的几个总要概念:

  1. Context
  2. Handle
  3. Handle Scope
  4. Templates
  5. Isolates

他山之石之Strategies of setting and implementing goals

Life ultimately means tasking the responsibility to find the right answer to its problems and to fulfill the tasks which it constantly sets for each individuals.

这篇论文论证了设定目标与实现目标的个别方法论,分别为Mental Contrasting以及Implementation Intentions。

Mental Contrasting是一个对比的过程:对比理想中的自己与现实中的自己,发现其中的差距。为了弥补两者的差距,需要定量得发觉其中的原因,从而提炼出需要的目标。 比如我想象一年后的自己拥有六块腹肌,而现实是我有“一大块”腹肌。 为了拥有六块腹肌,我需要达成的目标是,每天运动1小时,控制饮食等等。 与Mental Contrasting相伴的还有两种不健康的形式,即Mental Indulging与Mental Dwelling。 前者只沉浸在对理想的假象中,不面对现实,而后者则想法,只看到了现实的不足而不去设想理想的未来。应该避免这两种情况的发生。

Implementation Intentions即一种心理预设,它大致上以“如果…,我要….”的形式出现。 文中总结了四个阻碍目标达成的原因:难以开始行动,难以坚持,无法意识到目标是徒劳的,以及不挑战自己的极限。 Implementation Intensions为这四个困难都提供了解决的心理预设。 比如我要练腹肌,那么我给我自己一个心理预设,“如果看书看不下去时,那么我要做一组卷腹”。 那么每当看书看不下去时,心理会在很大程度上触发“做一组卷腹”的预设。

其实,我们可以把寻找目标,实现目标的过程比喻为运用神经元网络学习数据的过程。 我们的目标即学习的目标,每一个“如果…,我要…”即神经元,“看书看不下去”就是一个阈值,“做一组卷腹”即单元输出。寻找这些“如果..,我要…”的过程即各种神经元网络算法。

以下是详细的摘记,希望能有所裨益。