> 进程
指在程序中正在运行的一个应用程序;程序一旦运行就是进程;进程--资源分配的最小单位。
进程状态:进程有三个状态,就绪、运行和阻塞。
就绪状态其实就是获取了出cpu外的所有资源,只要处理器分配资源就可以马上执行。
运行态就是获得了处理器分配的资源,程序开始执行。
阻塞态,当程序条件不够时候,需要等待条件满足时候才能执行,如等待i/o操作时候,此刻的状态就叫阻塞态。
> 程序
程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。
> 线程
系统分配处理器时间资源的基本单元,或说进程之内独立执行的一个单元执行流。线程--程序执行的最小单位。
通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位,由于线程比进程更
小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统多个程序间并发执
行的程度。
> 多线程
多线程就是几乎同时执行多个线程(一个处理器在某一个时间点上永远都只能是一个线程!即使这个处理器是多
核的,除非有多个处理器才能实现多个线程同时运行)。"几乎同时"是因为实际上多线程程序中的多个线程实际上
是一个线程执行一会儿然后切换其他的线程再执行,并不是很多书籍所谓的同时执行。
优点:
1、进程之间不能共享内存,但线程之间共享内存非常容易。
2、系统创建进程时需要为该进程重新分配系统资源,但创建线程则代价小得多,因此使用多线程来实现多任务并发
比多进程的效率高
3、Java语言内置了多线程功能支持,而不是单纯地作为底层操作系统的调度方式,从而简化了Java的多线程编程
> 守护线程
守护线程就是主线程不管该线程的执行情况,只要是其他子线程结束且主线程执行完毕,主线程都会关闭。
也就是说:主线程不等待该守护线程的执行完再去关闭。
如果还有一个或以上的非守护线程则不会退出。
> 进程和线程的区别
1.一个程序至少有一个进程,一个进程至少有一个线程
2.线程的划分尺度小于进程,使得多线程程序的并发性高
3.进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率
4.从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统
并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。
'''
线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。
同时,线程适合于在SMP(多核处理机)机器上运行,而进程则可以跨机器迁移。
'''
'''
> 并发和并行
并发:同一时刻只能有一条指令执行,但多个进程指令被快速轮换执行
并行:同一时刻,有多条指令在多个处理器上同时执行
'''
> 伪并行
单核架构中,让线程以极短的时间间隔交替执行,从人的感觉上看它们就像在同时执行一样
由于仅有一个运算单元,当线程皆执行计算密集型任务时,多线程可能会出现 1 + 1 < 2 的反效果
> 真并行
只能在多核架构上实现
对于计算密集型任务,巧妙地使用多线程或多进程将其分配至多个 CPU 上,通常可以成倍地缩短运算时间
> 多进程
多核架构上时,为真正的并行
许多人非常忌讳使用多进程,理由是进程操作(创建、切换)的时间开销太大了,而且会占用更多的内存。
这种担心其实没有必要——除非是对并发量要求很高的应用(如服务器),多进程增加的时空开销其实都在
可以接受的范围中。(自己本地跑跑可以使用多进程,上服务器不建议使用)
【随笔】多线程 - 伪多线程 - 多进程
最新推荐文章于 2021-12-13 16:34:35 发布