多线程编程的好处及在什么情况下用多线程

说白了,多线程就是利用CPU的“分割时间”来完成所有事情,但并不是神化它。

我们先来说说最重要的事情。
多线程的本质是解决CPU空闲的问题。
去年我们运行了一个电子商务后端项目。
用户登录和闪购必须在单独的线程中处理。
否则闪购界面会直接卡在PPT里——当数据库查询阻塞主线程时,用户甚至无法登录。
还有一点,多线程并不意味着CPU实际上变快了,而是1 00个时间片像拼图一样被使用。
比如下载文件时,CPU会分配1 0%的算力来下载,同时显示进度并保存文件,但实际上每一步仍然是一步步执行的,只不过切换快得让你看不清。
还有另一个重要的细节。
在去年的测试中,我们发现当线程数超过核心数时(例如,8 核CPU运行1 6 个线程),它会变慢,因为CPU在切换线程时必须抢占总线。
去年,当我们调整到1 2 线程时,性能下降了。

一开始我以为多线程可以解决所有延迟,后来发现错了。
例如,使用多个线程执行简单的计算任务会比较慢,因为线程创建和销毁所花费的时间比计算本身要长。
等等,还有一件事,内存使用也需要考虑。
去年的视频处理项目中,8 个线程运行时,显存直接被炸掉。
用术语来说,它被称为雪崩效应。
事实上,前部的轻微延迟导致了整个后部的下降。

老实说,这很令人困惑。
多线程适用于I/O密集型场景。
比如我们医院的影像系统,读卡器在处理CT片时慢如乌龟。
使用多个线程来分离采集、解密和归档。
用户看着进度条飞逝。
事实上,CPU在整个过程中只负责传输数据。
但不要一看到“并发”就疯狂地启动线程。
你首先要计算一下切换线程的成本和实际的收益——例如,使用单线程进行简单排序要快得多。

很多人没有注意到这一点。
多线程的本质是“不耽误主要工作”。
例如,做饭时,你不会因为切菜而忘记煮肉。
如果你必须一边切菜一边算账,那不如把精力集中在煮肉上。

android中对view的更新有几种方式 多线程和双缓冲的使用情况

你明白吗?这三种情况就是Android中更新View的三种方式。

1 .无需多线程,无需双缓冲:当UI发生变化时,直接调用invalidate(),系统将自动重绘。

2 使用多线程代替双缓冲:需要另外开一个线程,但是不能直接操作UI。
使用处理程序来处理主线程上的更新。

3 使用多线程和双缓冲:使用SurfaceView实现SurfaceHolder.Callback,在子类中直接操作画布。

哪一种适合您的应用场景,由您决定。