理解流的发展与演化需要先理解一些概念。
家庭主妇在用热水器烧水,水没开的时候一直等着,别的啥也不干,这就是阻塞。但是如果烧水的时候同时去洗菜,就是非阻塞。
家庭主妇烧水用的是不带报警器的热水器,则该主妇需要不时自己过来看水是否烧开,此为同步;如果热水器有报警功能,水烧开后自动报警通知改主妇,则为异步。
阻塞非阻塞:有数据返回前是否等待
阻塞:请求方发送数据后,线程得不到返回值就一直等.
非阻塞:请求方发送数据后,线程得不到返回值可以先做别的事。
同步异步:消息接收方通知发送方已经返回数据了
同步:请求发送后,需要自己查看有消息返回
异步:消息返回方会告知结果是否返回
同步阻塞(BIO):请求方自己看是否有结果返回,并且再有结果返回之前一直阻塞。每需要分配线程处理,因为线程被阻塞并且不能干别的事,所以每连接每线程,同一连接中新的请求会排队
同步非阻塞(NIO):请求方自己查看是否有结果返回,再有结果返回之前,也可以干别的事,但需要请求方经常查看。多个request可共用线程,但是线程需要维护多个请求,即不定时查看哪些线程已经处理完毕。
异步阻塞:被请求方通知是否有结果返回,并且请求方处理线程一直阻塞。
异步非阻塞(AIO):被请求方通知是否有结果返回,并且请求方可以干别的事。请求进来,线程发出io请求,无需等待,无需自己查询IO是否完成,IO完成会自动通知处理请求的线程。