为什么需要异步编程
问题一:
耗时的操作阻塞了UI线程,造成UI线程不能响应用户操作。
解决方案:
在发起耗时操作的请求之后要立即返回,不要阻塞UI线程,让UI线程可以继续响应用用户的操作。然后等耗时操作返回后,通过回调来处理耗时操作返回的结果。
问题二:
线程的创建和销毁是昂贵的,而服务器的资源是有限的。
解决方案:
为了创建高可伸缩性的服务,我们必须用最少的线程处理更多的请求。IO操作如数据库访问,磁盘操作,Socket访问不属于计算密集型操作,是不需要单独分配一个线程来处理的。
怎么选择:
计算密集型:
CPU是主要资源。这类应用无论怎样你都必须占用CPU时间,所以你可以通过创建后台线程的方式来实现异步。
IO密集型:
IO是主要瓶颈。这类应用实际上是不需要占用CPU的,使用异步IO(发起异步IO然后立即返回,当异步IO执行完毕后会通知你)将会对我们的应用的效率带来革命性的影响,因为IO相对于CPU来说是非常非常非常慢速的设备,我们甚至只需要很少的线程就可以处理很多的任务。