标签:线程 多核 单线程 目的 实现 开启 取数 定义 数据库访问
1.多线程定义:
在单个程序中同时运行多个线程完成不同的工作.多线程本质上是空间换时间.单个程序是什么?一个正在执行的程序就是进程.线程是什么?线程是程序中一个单一的顺序控制流程.线程是程序中最小的执行单位,与进程同样都为基本单元,在一些老式操作系统中是不存在线程这个概念存在的.在这类操作系统中是无法实现线程的.所以多线程与多进程都是依托于操作系统的,都是操作系统的概念不是某种语言的一个概念.在windows中进程之间的内存空间是互相独立的,它的异步协同需要线程来完成,java在这种操作系统中是单进程多线程的体现.
2.多线程的应用场景:
多线程并不一定能提升性能(甚至还会降低性能);多线程也不只是为了提升性能.
1,避免阻塞:单线程中的程序是顺序执行的.如果前方操作出现阻塞后方操作无法执行.此时多线程就能解决这类问题.例1:
a = a1 + a2;
b = b1 + b2;
在单线程如果a 操作阻塞那么 b操作就无法执行,此时开启两个线程分别执行a,b就可以解决类似问题.
2,避免CPU空闲:在进行数据库访问,磁盘IO时对CPU的利用率并不高,在此时可以多线程执行其他的任务,来让CPU繁忙起来.从而让整体程序加快速度完成.
3,提升性能:需要进行空间换时间的情况下. 例2:
要从三个数据库中取数据,每取一个数据库需要耗费10秒那么单线程则需要30秒,利用多线程多开两个线程则需要10秒.
3.多线程的应用前提
1,任务具有并发性.如例1就可以使用多线程在下方情况是不行的,例3:
a = a1 + a2;
b = a + b1 ;
b运算依赖于a的运算结果,在这种情况下是不值得多线程的,因为无法带来任何性能的提升.
2,只有在当前性能瓶颈是cpu的情况下,多线程才能实现提升性能的目的.例4:
一段程序在IO时(IOPS,IO吞吐量)拖慢了程序性能,即使把程序拆成两个线程去运行,也无法带来性能的提升.
3.机器硬件上必须是多核的,负责即使是拆成多个可并行子任务,也没有多余的cpu去执行,只有一个cpu在多个线程中切换来却换去凭空增加了额外的开销.
标签:线程 多核 单线程 目的 实现 开启 取数 定义 数据库访问
原文地址:https://www.cnblogs.com/cyh38472/p/9933533.html