简单描述同步异步阻塞和非阻塞的应用场景
同步 异步 阻塞 非阻塞 是对于需求而规定的 !!! 仅仅是思想!
对于linux而言程序员作为需求方 可以认为io复用是同步非阻塞的 很多的系统调用都是同步阻塞的
但是对于一个类似netty框架来说 进行了封装完全可以认为是异步非阻塞的 框架进行了封装
公司为游戏公司 用游戏公司举例子
需求支持1W玩家同时登录游戏不造成玩家体验不好(所谓体验不好指的是大量玩家进不了游戏 现在表示为loading 一直加载类似)
造成这样的原因 由于服务器数据没加载完成 数据从什么地方来读数据库等等地方都可以。。但是即使是一张表数据2MS 但是存在很多张表 比如20张表吧 甚至更多。。。 20*2=40ms 1W人同时进行操作 那么就是40ms*1W 也就是400s 那么最后的一个玩家 进行loading的时间为6分钟 还不算网络时间等等。。。 当然这个进行数据库的读取为1个线程的情况 那么怎么提高玩家的体验
可以先读取玩家必须要的表 让玩家先进入游戏 可能只有几张 这个20 张表就变成2张或者是3张其他的表 通过另外的线程进行读取 这个表示的就是异步的思想 个人感觉异步一般都是会开辟1个线程(子线程)去弄
阻塞是对于io而言的 一般来说都是网络io 网络io 有一点就是不知对方是什么时候发生消息到服务器上的 因此有两种方式阻塞和非阻塞 阻塞表示的是对方即使没有发送消息 也进行等待消息的操作 非阻塞表示的是轮询这个等待消息的操作