漫道多线程(一):多线程与并行计算简述
多线程系列第二篇文章 漫道多线程(二):临界区、锁与JMM
文章目录
什么是并行计算
并行计算或称平行计算是相对于串行计算来说的。它是一种一次可执行多个指令的算法,目的是提高计算速度,及通过扩大问题求解规模,解决大型而复杂的计算问题。所谓并行计算可分为时间上的并行和空间上的并行。 时间上的并行就是指流水线技术,而空间上的并行则是指用多个处理器并发的执行计算。
什么是多线程
多线程的定义如下,该定义来自多线程的百度百科
多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。
由此我们知道多线程本质是一种实现并行计算的技术手段。
并行计算的好处
我们使用多线程就是为了更好的进行并行计算,那么并行计算有那些优势以及前景,优点如下:
1.硬件上的迫切需要
在硬件界有一个非常著名的摩尔定律:
集成电路上可以容纳的晶体管数目在大约每经过24个月便会增加一倍。换言之,处理器的性能每隔两年翻一倍。
而正是得益于摩尔定律的威力,cpu的性能日益高涨,我们的程序性能也随之水涨船高。但是可怕的是受限于人类的科技水平的发展,摩尔定律正在逐渐失效。
为了继续保持程序性能的高速发展,在摩尔定律失效的同时,于是人们逐渐把提升硬件性能的目光聚集在提升CPU多核集成上面,为了更好的利用好多核cpu的性能,由此,并行计算自然而然的推广了开来。
2.更好的提升资源利用率
打个比喻,如果使用串行计算去执行多个任务(例如多个用户的访问),那么就会出现任何一个用户上传或者下载一个大文件,都会引起其他用户的卡顿,因为是串行的,必须满足完这个用户的需求,才能服务下一个用户,可想而知,这对于程序是多么可怕的一件事。
而如果使用并行计算的话,可以同时允许多个用户多个任务同时在后台程序执行,就不会出现这种情况,实际上大多数程序也的确是采用的并行计算处理多用户访问。
在执行多个任务的情况下,可能并行计算的运行效率甚至略低于串行计算(在单核cpu的情况下,并行计算往往还有创建和切换上下文的开销),但是在资源使用效率上提高上,运行效率的略微降低甚至不足一提。而且现在大多数计算机都是多核cpu,那么并行计算的无论是在运行效率还是资源利用率上的优势都足以碾压串行计算。
为什么要使用多线程实现并行计算
实际上,并行计算的实现多种多样,消息队列,微服务,多线程都算是并行计算的技术实现方案。都是不同应用场景下对于并行计算的实现,这些技术方案之间没有高下,只有应用场景之分。
多线程实现并行计算的优势:
- 方案简单
- 成本低
- 因为多线程是可以共享同一个进程下的内存,所以在一定的用户体量下,多线程实现的并行计算性能极高,但是同时也容易带来许多难以发现的bug
CPU时间分片
我们知道,线程概念的引入使程序员不必