所谓的异步,就是如下场景:
线程T1对线程T2说:T2,你吃饭了吗? T1问完问题后,就去干别的事情去了,并不需要一直苦苦等待T2的回答。但是为了最终T1可以接受到T2的回答内容,我们可以引出一个委托方来处理。具体处理过程:在进行通信之前,我们先创建一个缓冲队列,该缓冲队列专门用来存放T2给T1的答复内容。此时,委托方就起作用了,系统让该委托方一直对缓冲队列进行监控,当发现缓冲队列中有了内容,便通知线程T1,此时T1放下手头的工作,将缓冲队列中的内容取出。
例如,在Java中:当用户点击了某个浏览所有数据的按钮后,此时我们就需要启动一个子线程,让该子线程专门去连接数据库,从数据中取到符合的数据,只要取到一条,就给之前定义好的缓冲队列中发送一条数据。然后,主线程就可以从队列中逐条取出数据,显示给用户,而如果因为一些原因(网络延迟等等)导致子线程在一时半会儿没能从数据库中取出数据,则主线程可以去干别的事情,没有必要等到查出所有的数据方才转去干别的事。
假设,定义cache_queue为缓冲队列,message为要发送/接受的消息数据。
Send(cache_queue, message) :发送一个消息到缓冲队列
Receive(cache_queue, message) :从缓冲队列中取出一个消息