多线程会让处理速度变快吗

·  阅读 529

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

多线程会让处理速度变快吗

我还记得刚开始编程的时候,会有不少一部分同事认为多线程目的是为了加快处理速度,你觉得这么理解对吗?结论是处理同一个任务时,多线程并不能加快处理速度,它适用于多任务并发的场景。

线程的处理速度

线程其实就像一条河流,主线程和子线程类似于它的主流和支流,支流会比主流先流向终点吗? 答案是否定的。 按说他们的速度是大致一样的,甚至支流还要慢一些,因为这需要CPU切换线程,而切换线程会耗费一些时间,这些时间被称作时间片,时间片的长度一般为几十毫秒。

那什么影响了单任务的处理速度?

是CPU的运算量和内存

上下文切换

单核CPU也可以处理多线程

并不是说单核CPU就只只能运行一个线程,时间片是CPU分配给各个线程的时间,因为时间片非常短,所以CPU通过不停地切换线程执行,让我们感觉多个线程是同时执行的。

CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务。但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这个任务的状态

上面的过程被称作 上下文切换

如何用多线程加快任务的速度

上面论述了在单任务场景下,开启线程并不能加快速度。
那么使用多线程可以怎样加快速度呢?
那就是把单任务的场景拆分为多任务的场景,利用多线程的优势并发执行。

场景应用:比如要给一张图片添加滤镜。
普通的做法是把图片颜色数组提取出来,然后通过算法进行转化,然后生成。

其实有更高级的做法,当然对技术的要求也高了一些。

可以把图片分割成多个部分,每个图片部分放在单独一个线程进行渲染,渲染完毕之后再合成一张图。

部分参考:《Java并发编程的艺术》

分类:
Android
标签:
分类:
Android
标签: