|
我曾经看过一篇帖子,异步解决的是IO密集型的操作,后来再实际开发中我觉得这个不够准确。异步同样可以解决CPU密集型操作,只不过场景有限而已。
有一个前提:利用异步解决CPU密集型操作要求当前运行环境支持多线程才行,比如JavaScript这个语言,本质上它的运行环境是单线程的,所以对于CPU密集型操作,JavaScript会显得力不从心。
异步解决CPU密集型操作一般情况下发生在同进程中,为什么这么说呢,如果发生在不同机器或者不同进程在很多情况下已经属于IO密集型的范围了。这里顺便提醒一下:IO操作可不简简单单是指磁盘的操作,素有的输入/输出操作都可以被广泛的称为IO。
我觉得还是开举个栗子吧:
在一个带有UI的软件上点击一个按钮,UI线程会发生操作行为,假如UI线程在执行过程中有一个计算比较耗时的操作,UI线程在同步操作的情况下回一直等待计算结果,在计算完毕之后才会继续执行剩余操作。在等待的这个过程中,呈现给用户的清卡鬼就是UI卡住了,俗称假死,带给用户的体验是非常不好的。在这种情况下,我们可以新启动一个线程去执行这个耗时的操作,当执行完毕,利用某种机制来通知原来线程,以便原来线程继续自己的操作。
启动新线程执行CPU密集型操作利用的气势就是多线程的优势,如果是单核CPU,其实这种优势并不明显。
|