java 异步缓存_为什么redis在java是同步缓存,而在nodejs是异步缓存?

和redis的IO一定是同步的,任何语言

java方面分两种情况:

1.你是servlet模型进来就是多线程,每个用户session对应一个线程,那么异步的API没有意义也不方便理解和代码组织,同步的API即可。

2. 你是类似netty的eventloop模型,一个线程(eventloop)对应多个用户session,那么IO操作应该进入独立的线程池或者task队列(eventloop/其他线程消耗),那么redis也使用异步API或者至少做成异步的方式调用,这样可以保证不卡主线程(主线程负责处理非IO的其他操作,仅使用CPU和内存,不使用磁盘与网络)

nodejs只有java里面的第二种情况,并且只有一个eventloop(线程),所以必须按照2来做,也就是所有IO异步化,比如100个用户进来在nodejs都是一个线程处理的(这么说不严谨),所以如果你在线程内使用同步API,意味着其他99个用户都要等这个API返回,所以必须把这个API写成异步,不租塞业务线程。实际上这个API背后还有一个nodejs的线程做这个IO操作,收到redis的回复停掉主线程,执行回调函数内的代码块。

有此疑问建议深入学习一下netty,对你理解nodejs很有好处,原理都是类似。

PS:初学java可能会有多线程=高性能的误解,多线程其实是非主流

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值