阅读更多
异步:多线程干多件事,叫异步
同步:单线程干多件事,叫同步
oio:单线程中,connect,canRead,read,canWrite,write 5种操作有可能阻塞当前线程叫oio。为啥会有这种模型呢?因为系统底层遇到以上5种事件并不通知你,你都需要自己去等。
nio:单线程中,connect,canRead,canWrite 不阻塞当前线程,read和write 阻塞当前线程 叫nio。为啥会有这种模型呢?自从系统底层支持了select网络模型,系统可以帮你发现connect/canRead/canWrite 你就不需要自己去等(阻塞)了,时不常去问一下就可以了。
aio:单线程中,connect,canRead,read,canWrite,write 都不阻塞当前线程 叫aio。这种牛逼,系统自动帮你处理了 connect,canRead,read,canWrite,write 五种事件,然后把读到的数据或写入的结果直接给你,你都不用关心是否可读可写。
同步oio:只能有效处理单个连接,几乎是不可用的模型。无法处理多个连接,因为如果第一个连接是不可读状态线程会阻塞,第二个连接根本进不来。
异步oio:可以处理多个连接,比较传统的模型。每个线程处理一个连接,线程内部连接的操作可以各种阻塞。缺点线程数随连接数增加而增加,上下文切换严重,不适合高连接低数据场景
同步nio:单线程中使用nio,可以处理多个连接,传说中的多路复用。java.nio 的基本模型。缺点是虽然connect,canRead,canWrite等事件未到达时不会阻塞线程,但是read和write会阻塞。只适合高连接低数据场景
异步nio:netty使用的方式,反应堆模式,可用性极高。使用两个线程池A/B,A异步处理connect canRead canWrite 等非阻塞事件,B异步处理write read 等阻塞事件。在高并发高数据量场景都可以使用。
异步aio:未知