同步
发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值.
异步
调用在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用
阻塞
阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
非阻塞
非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程
结论
我认为大概是这样的:
异步/同步是发生在多线程中的.(单线程中的Timer内部实现也是多线程)
阻塞/非阻塞是发生在单线程中的.
同步和阻塞的最大区别就是线程会不会挂起
四种方式组合及性能分析
组合方式 | 性能分析 |
---|---|
同步阻塞 | 最常用的一种用法,使用也是最简单的,但是I/O性能一般很差,CPU大部分处于控线状态 |
同步非阻塞 | 提升I/O性能常用的手段,就是将I/O的阻塞改成非阻塞方式,尤其在网络I/O是长连接同时传输数据也不是很多的情况下,提升性能非常有效. 这种方式通常能提升I/O性能,但是会增加CPU消耗,要考虑增加的I/O性能能不能补偿CPU的消耗,也就是系统的瓶颈是I/O上还是CPU上. |
异步阻塞 | 这种方式在分布式数据库中经常用到,例如,在一个分布式数据库中记录一条记录,通常会有一份是同步阻塞的记录,还有2~3份备份记录会写到其他机器上,这些备份记录通常都是采用异步阻塞的方式写I/O. 异步阻塞对网络I/O能够提升效率,尤其像上面这种同时写多分相同数据的情况 |
异步非阻塞 | 这种组合方式用起来比较复杂,只有在一些非常复杂的分布式情况下使用,集群之间的消息同步机制一半用这种I/O组合方式,如Cassandra的Gossip通信机制就是采用异步非阻塞的方式. 它适合同时要传多分相同的数据到集群中不同的机器,同时数据的传输量虽然不大却非常频繁的情况.这种网络I/O用这种方式性能能达到最高 |
1.引用自<深入分析java web技术内幕>
2.https://www.zhihu.com/question/19732473
此为读书笔记,还望各位多多指导