回答
我发现Express网站很好地解释了一些事情,并且Express对于新用户来说相当平易近人。
多线程系统(例如Java和底层JVM)包含许多执行线程,每个执行线程可以同时执行自己的代码指令(在多核硬件CPU上)或在两者之间切换,其中每个线程运行一段预定的时间,然后操作系统安排下一个线程执行。
节点程序在Node环境中执行,它是单线程的,所以整个程序只有一个代码执行线程,并且没有多个线程同时执行。
一个简单的比喻就是将事件循环与标准编程结构(while循环)进行比较,这正是它的原型。
while(1){
// Node sets this up. Do stuff.. Runs until our program terminates.
}
启动一个节点程序会启动这个循环。你可以想象你的程序被插入到这个循环中。
如果程序中的第一条指令是从磁盘读取文件。该请求将被分派到底层的OS系统调用中以读取文件。
节点为读取文件等事物提供异步和同步功能,但通常首选异步功能,因为在同步调用中,单个线程系统中读取文件会导致整个程序停止运行。
while(1){
require('fs').readFileSync('file.txt');
// stop everything until the OS reports the file has been read
}
在(首选)异步版本中,读取文件的请求发送到操作系统,并且指定了回调函数,循环继续。该程序实质上等待操作系统响应,在下一个循环(aka)中,系统会调用您提供的回调函数(本质上只是内存中的一个位置)并返回结果。
while(1){
// 1st loop does this
require('fs').readFile('file.txt', callback);
// 2nd loop does this, system calls our callback function with the result
callback(err, result)
}
单线程系统有预期的优点。一个是在线程之间没有需要由OS完成的上下文切换,这消除了在系统中执行该任务的开销。
另一方面,这是如何与其他系统和编程语言处理它的方式进行比较的热门话题 - 是使用回调函数作为实现异步性的手段的简单编程。
有很多很好的资源来学习Express.js例如:
http://shop.oreilly.com/product/0636920032977.do
https://www.udemy.com/all-about-nodejs/
https://www.manning.com/books/express-in-action
https://www.packtpub.com/web-development/mastering-web-application-development-express
https://github.com/azat-co/expressworks
您可能还想来检查这些博客:
https://codeforgeek.com/2014/10/express-complete-tutorial-part-1/
- 1. socket.io给node.js/express.js
- 2. 的Node.js + Express.js + SSL
- 3. Express.js/Node.js与mysql
- 4. Node.js + Express.js + Socket.io
- 5. Node.JS,Angular.JS,MySql,Express.JS
- 6. Express.js问题! (Node.js)
- 7. backbone.js + node.js - express.js
- 8. Node.js理论 - Node.js,Express.js,Passport.js
- 9. node.js + express.js + dust.js问题
- 10. Express.Js,Node.Js,MongoDB问题
- 11. Node.JS/Express.JS CouchDB会话存储
- 12. 的Node.js和Express.js布局
- 13. Node.js&Express.js字体区分
- 14. Summernote图像+的Node.js(Express.js)
- 15. node.js的 - 当PARAM express.js太长
- 16. Node.js/express.js/Backbone.js:req.body.keys未定义?
- 17. Node.js如何支持Express.js?
- 18. 我在Express.js和Node.js的
- 19. Node.js | Express.js | Redis.io - 处理订单
- 20. Node.js/Express.js/Angular2中的ForBiddenError
- 21. 会话和socket.io(node.js,express.js)
- 22. node.js + express.js + socket.io授权:无Cookie
- 23. node.js中的同步路由(关于express.js)
- 24. 如何发布日期到node.js/express.js?
- 25. Node.js + Express.js用户权限安全模型
- 26. node.js express.js查看中的错误处理
- 27. Node.js/Express.js链证书不起作用
- 28. 使Ajax调用Angular到Node.js(express.js)
- 29. 默认的Node.js + Express.js不运行
- 30. 使用javascript或Express.js或node.js处理Cookie?