java io密集型任务_为什么说node.js相比java更利于IO密集型应用呢?

JavaScript是单线程执行的,不适合执行耗时很长的cpu操作

这里说的cpu操作是指计算型任务,这类任务是要阻塞js的执行线程的。

举个例子:假设有一个耗时很长的计算型任务在执行,同时有一个setTimeout的回调函数到时间了也要执行,那么这个回调就要等着你的计算型任务执行完成后再执行。这可能会导致你的回调函数的执行时间并不是你预期的时间,从而有可能导致程序逻辑出错。在node.js web服务项目里,这可能会导致你的服务没有能力再接收新的请求。

所以它不适合处理cpu密集型任务,单线程就是同一时刻只能做一件事。

cpu操作和io操作不一样,io操作的大部分工作不是js完成的,比如你把一段文本写入某个文件,js只要启动这个写入操作即可,实际写入工作是node.js的其他部分完成的,写入完成后再发信号给js的执行线程,让它执行写入文件的回调函数。浏览器发起ajax请求也一样,实际请求工作是浏览器完成的,不是js执行线程完成的

这类异步操作是多线程的,是js执行线程和c线程搭配干活的。

传统语言搞多线程要考虑很多事情,比如线程同步,信号量,死锁什么的,但js和其运行环境都把这些事给你搞定了,所以你甚至不知道这些任务是多线程完成的都没问题。

这也许就是他善于做这类工作的原因吧

以上,希望你能喜欢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值