线程小测试:
在初步学习了线程相关的知识后,利用线程跑一段代码,看看其花费的时间与一般我们编译代码所使用的时间有何差别?
下面是我们对快排进行时间测试:
由于数据过小看不出来差别,那么直接生成十万随机数来进行排序
结果用了1.158s,我们继续用该快排代码调用线程再跑一遍
我们首先先开辟一个线程来测试:
我们发现调用线程跑代码所用的时间是要比直接跑代码时间要长几十倍
不妨我们多开辟几个线程来继续测试:
线程数 | 时间 |
---|---|
1 | 27.692s |
2 | 10.726s |
3 | 16.463s |
4 | 22.035s |
5 | 27.652s |
我们此时会发现一个问题,为什么测试的时间不是随着线程数增大而增大呢,反而线程数越多时间反而变长了呢?我们先大概了解一下单线程和多线程。
-
单线程:单线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。
-
多线程:多线程程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行。
-
总结:多线程一般多用于耗时或大量占用处理器的任务阻塞用户界面操作,而对于快排而言只是对于将数组中的元素做移动,而这样就大材小用,调用线程所用的时间反而会比一般执行代码所用的时间长。因为多线程的情况下,CPU还要花时间去维护,CPU处理各线程的请求时在线程间的切换也要花时间,所以一般情况下是可以不用多线程的,用了有时反而会得不偿失。大多情况下,要用到多线程的主要是需要处理大量的IO操作时或处理的情况需要花大量的时间等等,比如:读写文件、视频图像的采集、处理、显示、保存等。