node.js是单线程。
好处就是
1)简单
2)高性能,避免了频繁的线程切换开销
3)占用资源小,因为是单线程,在大负荷情况下,对内存占用仍然很低
3)线程安全,没有加锁、解锁、死锁这些问题
Node.js是单线程的,它通过事件轮询(event loop)来实现并行操作。可以在不新增额外线程的情况下,依然可以对任务进行并行处理。
Node.js 借助事件驱动, 非阻塞I/O 模型变得轻量和高效, 非常适合 运行在分布式设备 的 数据密集型 的实时应用。V8引擎执行Javascript的速度非常快,性能非常好。
非阻塞I/O和阻塞I/O分析:
我们可以将同步I/O称为阻塞I/O,非阻塞I/O称为异步I/O。同步I/O当请求发出之后,应用程序就会阻塞,直到请求满足为止;非阻塞I/O允许进程发起很多 I/O 操作,而不用阻塞或等待任何操作完成。稍后或在接收到 I/O 操作完成的通知时,进程就可以检索 I/O 操作的结果。
在使用同步I/O的网络应用中,如果要同时处理多个客户端请求,或是在客户端要同时和多个服务器进行通就必须使用多线程来处理。也就是说,将每一个客户端请求分配给一个线程来单独处理。
非阻塞I/O的程序一般是单线程的,因此,服务端接收的客户端请求数并不随着工作线程数的增加而增加。所以使用非阻塞I/O模式就不会受到操作系统对线程总数的限制,也不会 占用大量的服务器资源。
非阻塞I/O和同步I/O最明显的不同就是同步I/O所有可能被阻塞的地址在非阻塞I/O中都不会被阻塞。如在读取数据时,如果数据暂时无法被读取。那么 在非阻塞I/O中会立刻返回,以便程序可以执行其他的代码,然后系统会不断侦测这个未完成的读取操作,直到可以继续读数据时再来完成这个操作。
如:file.txt的内容是:hello world
非阻塞:
其输出的结果是
end,
hello world
程序不会等待文件读取,而是继续执行输出end,等到文件读取完成后就会回调响应函数,输出hello world
阻塞
其结果是:
hello world
end.
程序会等待文本读取完毕输出读取结果后再往下面执行,输出end。
结果分析:
非阻塞I/O发送请求后立即返回执行后面的语句,执行完以后进入时间循环监听,当fs接受到I/O请求完成事件时,事件循环会主动调用 回调函数执行后续工作,同步则是阻塞等待完成后,再继续执行。
自定义事件:
例一:
例二:
运行结果:
依次执行了。
相关推荐
今天小编就为大家分享一篇关于Nodejs让异步变成同步的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
NULL 博文链接:https://zhouxiaofeihaha.iteye.com/blog/1672380
nodejs异步_原理和缺陷 在Linux下,node.js靠libev和libeio配合使用来实现异步I/O
现在我们来看看nodejs中的事件驱动和异步I/O是如何实现的. nodejs是单线程(single thread)运行的,通过一个事件循环(event-loop)来循环取出消息队列(event-queue)中的消息进行处理,处理过程基本上就是去调用该消息...
使用jquery fileupload和nodejs formidable实现文件异步上传,可显示上传进度
本篇文章主要介绍了解析NodeJS异步I/O的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
NodeJS的异步编程风格,是一个Node.js的入门书籍,相信读过之后,你对node.j将会有一个比较清晰的认识和理解!
主要介绍了Nodejs异步回调之异常处理,结合实例形式分析了nodejs基于中间件进行异步回调异常处理过程出现的问题与相应的解决方法,需要的朋友可以参考下
Mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具。 本资源代码配合博客使用:https://blog.csdn.net/qq_25479327/article/details/81148772 NodeJs使用mongoose操作mongodb
主要介绍了NodeJs并发异步的回调处理的相关资料,需要的朋友可以参考下
主要介绍了Nodejs异步回调的优雅处理方法,本文使用了ES6中的新特性,用一种十分优雅的方式解决了回调问题,需要的朋友可以参考下
主要介绍了Nodejs异步流程框架async的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
nodejs中jquryfileupload异步上传的demo