本节主要内容
线程定义
为什么使用多线程
例 1
界面上点击某个按钮后,需要执行一个非常耗时的操作,如果不使用多线程,就只能傻等操作返回。
使用多线程,点击按钮之后,开辟1个新线程后台去执行这个耗时操作,前台界面继续执行其他菜单目录,录入数据等。
例 2
有个操作,1个线程需要20分钟完成,现在的多核cpu,可以真正同一时刻运行多个线程。
假设是双核cpu,同一时刻运行2个线程,操作就只需要10分钟可以完成。
多线程优点
(1)提高应用程序执行效率。【例1】
(2)提高cpu利用率。【例2】
多线程缺点
(1)占用内存,耗费cpu时间进行跟踪。
(2)共享资源访问相互影响,程式代码控制难度大。
问自己
新开辟的线程,肯定需要内存吧?
多个线程之间需要切换吧?切换需要占用cpu来计算吧?
多个线程的执行顺序,是无法确定的,当他们都需要访问相同的变量、文件时,需要对这个变量、文件做同步处理吧?
线程的数量
理想的,线程数量 = cpu核心数量
(1)超线程
利用硬件指令,把1个物理cpu核心内部的2个逻辑内核,模拟成2个物理核心。
通俗点就是1个cpu变2个cpu了,这时候,同一时刻,就可以2个线程真正的同时运行。
(2)多核处理器
就是cpu本身,就有2个或多个物理核心(比如:双核,四核),硬件本身就是可以同一时刻跑2个或多个线程。
同一时刻,1个cpu核心只会让1个线程使用。如果有多个线程,那肯定需要切换,这个切换也是必要的,不然就会导致傻等的问题。这里,我们只要明白,一个时刻,1个cpu核心,只会让1个线程使用。
线程的执行顺序
多个线程,执行顺序,是无法确定的。
这个问题
主要是操作系统Windows是抢占式管理,谁抢到cpu,cpu就帮你干活。
不过cpu计算非常的快,这次没抢到cpu,那就等下次呗,操作系统Windows也不会让线程饿死的。
理解同一时刻
1个cpu核心,同一时刻,只会有一个线程运行。多核心cpu,超线程,同一时刻,可以真正同时运行多个线程。
我们通常认为的电脑同时运行多个程序,同时执行多个任务。
这个【同时】并不是真正意义的【同一时刻】。
多个程序,多个任务是否同一时刻运行,要看硬件cpu的处理能力。
cpu计算非常的快,多个线程轮询cpu执行各自的操作。
线程切换频率很快,我们的感觉是多个线程同时运行。
要想多个线程【同一时刻】运行,那就需要多个cpu核心。
比如,采用超线程,多核心处理器,同一时刻可以真正运行,2个线程,8个线程,16个线程等。
以上内容,仅仅代表个人理解,以及参考书资料的观点。
如果有错误,请及时指出,不要让错误的观点误导更多的人,感谢!
网友评论