nodejs初接触

最近几日,开始学习nodejs,给你影响最为深刻的就是它使用javascript来进行服务端编程,大大提高了代码的自由度。我们都知道,js中我们不需要实例化对象,直接调用方法就可以做很多操作,作为一名java程序,对于不创建对象就可以进行各种操作,感觉颇为便捷。同时js也拥有面向对象的特性,可以帮助我们完成各种面向对象的操作。

此外,js是拥有函数传递性的(可以将一个FUNCTION作为参数),据说这也是nodejs的编写者最终选择了js的原因。因为它的函数传递性,可以完成nodejs最重要一个特性——事件驱动。

我们都知道事件驱动是指,在某个特定事件发生后,我们执行相应的操作。而nodejs本质是单线程,当发生某个复杂操作时,我们的整个线程需要等待这个复杂操作,只有在这个操作完成后,其他操作才能开始执行,这样就大大降低了我们效率。当然我们也可以开多个线程同时进行操作,这样开销会提高,而且当并发量过大时,依然会造成阻塞。因此nodejs想到的是使用事件驱动,一个复杂操作,我们无需等他完成,而是继续我们的主线程操作,当然你会为我们的下部操作会需要到这个复杂操作的结果,我们就把这个下部操作放到一个函数中,作为回调函数,而我们的复杂操作完成作为一个事件,当这个事件完成时,我们再去回调这个操作,同时我们的主线程中的操作继续。

一个很经典的例子,就是买车票:

单线程操作就是一个售票口,一群人买票,需要排队等待,无法进行其他操作。

多线程操作就是多个售票口,依然一群人买票,人多时依然需要排队,无法进行其他操作。

时间驱动就是找人代购,你把买票这个复杂的事情交给了别人,自己去干别的事,只需要等待别人把票买到。

开始学习,只是整理一下基本理论,开发细节还需慢慢加强。


你可能感兴趣的:(nodejs事件驱动)