前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java开发中同步异步、阻塞非阻塞知识总结

Java开发中同步异步、阻塞非阻塞知识总结

作者头像
用户1289394
发布2018-12-29 10:56:52
9100
发布2018-12-29 10:56:52
举报
文章被收录于专栏:Java学习网Java学习网

同步/异步(描述网络通信模式,适用于请求-响应模型)

  • 同步:发送方发送请求后,需要等待接收响应,结果占用并浪费了CPU资源
  • 异步:发送方发送请求后,不需要响应,可以继续发送下一个请求,或者主动挂起线程并释放CPU资源

阻塞/非阻塞(描述进程的函数方法调用方式)

  • 阻塞:IO 调用会一直阻塞,直至调用结果返回后,才能继续执行
  • 非阻塞:IO 调用可以立即返回,并执行下一个 IO 调用

总结,同步异步和阻塞非阻塞是两个不同的概念,用最简单的数据库查询来举一个例子:

  1. 如果发送一个请求,需要等待数据库响应,结果占用并浪费了CPU资源,这就是同步
  2. 如果发送一个请求,不需要数据库响应,可以继续处理另一个请求(NIO模式、回调通知模式),或者将任务插入一个队列中,主动挂起自身线程并释放CPU资源(异步队列模式),这就是异步
  3. 在第2点中,如果采用异步队列模式,会造成线程阻塞,直至获得数据库数据后,才能继续执行,这就是阻塞
  4. 在第2点中,如果采用NIO模式、回调通知模式,则意味着数据库IO调用可以立即返回,这就是非阻塞

一般来说,同步是最简单的编程方式,而异步编程虽然需要一定的技术和工作量,但是却能提升系统性能。对于阻塞与非阻塞,阻塞方式的实时响应性更好,但是挂起与唤醒线程的性能损耗更高,而非阻塞方式的性能、吞吐量更高,但是由于其是顺序执行每一个事件,一旦处理某一个事件过久,会直接影响后续事件的处理,因此实时响应性比较差。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java学习网 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档