Discuss / Java / 一点浅见

一点浅见

Topic source

异步是异在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真没空理其他人了

廖雪峰

#2 Created at ... [Delete] [Delete and Lock User]

异步适用于IO密集型任务,IO忙,CPU闲

计算密集型任务是CPU忙,异步就没啥用,只能加CPU


  • 1

Reply