异步是异在CPU上。
同步操作=不管干啥CPU陪着你等,比如一个长IO操作,尽管不需要CPU的参与它也在傻等。例子如:读文件,发了DB请求在等返回结果等
异步操作=你不需要CPU了,CPU把你搁在一边,这个thread去处理别的事情了。待会你的操作完成,哪个thread有空哪个回来理你,但是就不见得是原来同个thread了。
异步操作可以用DeferredResult来取到结果进行下一步操作。有点类似js promise这类(?)
举例两者差异:
如果getAllUsers()这个操作要花10分钟。线程池里面就三个线程。
同步:三个用户一起getAllUsers(),整个服务器CPU就陪着你干这事了尽管并不需要它。十分钟里面它对别的用户是死的。
异步:三个用户一起getAllUsers(),整个服务器CPU把你搁在一边,还可以响应人家login啊 register这类的请求。十分钟后你的结果返回来,CPU再处理你的结果。
但是如果长时间的是一个CPU 操作,比如calculateYearEndTax 要花十分钟 三个一起算,那就CPU真没空理其他人了
异步适用于IO密集型任务,IO忙,CPU闲
计算密集型任务是CPU忙,异步就没啥用,只能加CPU
Sign in to make a reply
薄荷糖与红茶
异步是异在CPU上。
同步操作=不管干啥CPU陪着你等,比如一个长IO操作,尽管不需要CPU的参与它也在傻等。例子如:读文件,发了DB请求在等返回结果等
异步操作=你不需要CPU了,CPU把你搁在一边,这个thread去处理别的事情了。待会你的操作完成,哪个thread有空哪个回来理你,但是就不见得是原来同个thread了。
异步操作可以用DeferredResult来取到结果进行下一步操作。有点类似js promise这类(?)
举例两者差异:
如果getAllUsers()这个操作要花10分钟。线程池里面就三个线程。
同步:三个用户一起getAllUsers(),整个服务器CPU就陪着你干这事了尽管并不需要它。十分钟里面它对别的用户是死的。
异步:三个用户一起getAllUsers(),整个服务器CPU把你搁在一边,还可以响应人家login啊 register这类的请求。十分钟后你的结果返回来,CPU再处理你的结果。
但是如果长时间的是一个CPU 操作,比如calculateYearEndTax 要花十分钟 三个一起算,那就CPU真没空理其他人了