队列
队列是一种先进先出的数据结构
我们的程序在什么情况下会用到队列呢?异步处理
。
场景
我们一般写的web程序都是同步执行的,比如前端发送一个登录请求,后端一步一步的处理,查询用户,判断密码等等,返回登陆成功或者错误信息,前端阻塞等到后端返回后进行下一步处理。
那么这种程序有一个什么问题呢,首先,前后端建立的http连接是有超时时间的,当后端处理请求时间过长会返回超时错误。
就算没有超时的限制,对于用户体验来讲,当你的程序响应很慢,那么用户就会觉得,这什么玩意,真垃圾!!!
导出场景
基于这些原因,我们可以需要快速的处理用户请求。像导出大文件的时候,没办法很快的给用户响应怎么办呢,我们可以用异步的方式处理,先给用户返回正在导出,或者导出成功。
这个时候我们后台程序真的导出了嘛?没有,我们可以将这个导出请求放入一个队列中,等待另外一个处理程序将队列中的数据取出进行处理,这个处理程序一直监听队列,如果发现队列有消息,就去取出来进行处理。在处理程序中可以根据数据类型的不同,把它送到具体的处理类中,比如导出数据,处理程序会分发给导出类进行处理,由导出类处理完成后,返回处理完成。