浅谈nodejs与php设计构思层面上的差异

2019-08-14 14:33:43

nodejs最近火的一塌糊涂,那为什么它可以成为千百程序员的新宠呢?


难道只是因为把js搬到了服务端?如果仅仅是这样是迁移了一个运行环境和增加几个模块的话我想完全不可能会得到喜新厌旧的程序员的青睐


nodejs和php的差异主要是两个方面:分工和运行机制


分工:nodejs直接跳过了服务器这个阶段,把创建服务器作为node的一个模块,监听请求这些应该是服务器做的工作现在变成了node做,这样就简化的开发环境,而且更加容易控制监听请求以及响应.也就是说node没有一个web容器,没有根目录的概念。


运行机制:


php在处理并发的时候是通过多线程处理,这样会导致硬件成本的增加,特别是一些频繁I/0的项目,很多的线程被阻塞,cpu得不到充分的利用。


node:node的核心理念是单线程,通过事件和回调实现并发。既然是单线程,那硬件成本自然比较低。


那单线程怎么实现并发呢?我认为正是这种实现的方法让大家耳目一新,所以才会让node如此的火,


并发实现原理:比如一百个请求要做一百件事,当第一个请求执行到i/o的时候立马挂起,不等待i/o成功,直接执行下一个事件,直到i/o完毕,这是触发回调事件,回调事件的优先级会比普通事件的优先级高,就是这样通过异步来实现单线程的并发处理。保证了线程永远有事做,不会等待


缺点:这样是提高了cup的利用率,但是无疑是把所有鸡蛋放在一个篮子里面,如果有个事件导致线程蹦了,直接的后果就是导致线程上的所有任务事件都蹦了,还有如果是运算的阻塞是没法并发的,所以这就局限了它只是适合做大量i/o的应用场景,不适合做大量计算的项目,例如股票这类型的。


node还有一个很大的特点就是路由功能,需要自己去配置,应为没有服务器软件,所以服务器软件的所有功能都需要自己去写,但是常用的功能在开源社区基本都已经有人写好了,对于我这样的喳喳来说简直就是福音啊。


以上笔记单纯代表个人观点,有不同意见的欢迎打搅。



  • 2019-06-12 22:34:16

    PHP身份证号打星号

    一个很简单的问题,想把身份证的号生日的4位隐藏,一开始查函数居然没有看到,然后用了好几个函数处理,觉得太麻烦就上网搜,后来发现有一个函数就能直接处理,我居然没看到~~初学者~~

  • 2019-06-13 10:09:51

    java(Android)跨Module调用对应类方法需求解决方案

    在开发组件化项目中,遇到一个这样的问题,两个不同的Module相互之间没有任何直接依赖关系,现在需求是需要在Module_A中调用Module_B中的某个类的方法,以下为解决此问题的方法;

  • 2019-06-13 11:31:32

    Android Studio接入ARouter以及简单使用

    你可能会说如果我的A module依赖了 B module,那么只要在B里面配置是不是就可以了?绝对不行!无论module之间关系如何,必须要同样配置!包括主项目和library项目!

  • 2019-06-13 11:34:24

    Android组件化方案

    1为什么要项目组件化 2如何组件化 3组件化实施流程

  • 2019-06-23 09:22:33

    Android 拍摄(横\竖屏)视频的懒人之路

    一般用在多媒体录制上面,当然如果你只是简单的想录制音频,用它最合适不过,不过如果你想更多样化的录制这里推荐《Android MP3录制,波形显示,音频权限兼容与播放》。今天的主题是录制视频,用的还是老式通用的Camera,不是新的camera2(这就尴尬了.....((/- -)/),反正个人秉承能用是王道的做法(懒)。之前也尝试过FFMPEG的录制合成音频,大小和效果也不错,只是有时候的兼容性确实有些问题,最主要还是资料不多,不好改啊 ̄へ ̄(懒)。

  • 2019-06-23 09:24:59

    仿抖音系列

    最近公司在做个短视频的项目,其中借鉴了很多抖音的设计,其中就有抖音的上下滑切换视频。