【随笔】多线程 - 伪多线程 - 多进程


> 进程
  指在程序中正在运行的一个应用程序;程序一旦运行就是进程;进程--资源分配的最小单位。
  进程状态:进程有三个状态,就绪、运行和阻塞。
  就绪状态其实就是获取了出cpu外的所有资源,只要处理器分配资源就可以马上执行。
  运行态就是获得了处理器分配的资源,程序开始执行。
  阻塞态,当程序条件不够时候,需要等待条件满足时候才能执行,如等待i/o操作时候,此刻的状态就叫阻塞态。

> 程序
  程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。
  
> 线程
  系统分配处理器时间资源的基本单元,或说进程之内独立执行的一个单元执行流。线程--程序执行的最小单位。
  通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位,由于线程比进程更
  小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统多个程序间并发执
  行的程度。
  
> 多线程
  多线程就是几乎同时执行多个线程(一个处理器在某一个时间点上永远都只能是一个线程!即使这个处理器是多
  核的,除非有多个处理器才能实现多个线程同时运行)。"几乎同时"是因为实际上多线程程序中的多个线程实际上
  是一个线程执行一会儿然后切换其他的线程再执行,并不是很多书籍所谓的同时执行。
  优点:
  1、进程之间不能共享内存,但线程之间共享内存非常容易。
  2、系统创建进程时需要为该进程重新分配系统资源,但创建线程则代价小得多,因此使用多线程来实现多任务并发
     比多进程的效率高
  3、Java语言内置了多线程功能支持,而不是单纯地作为底层操作系统的调度方式,从而简化了Java的多线程编程
  
> 守护线程
  守护线程就是主线程不管该线程的执行情况,只要是其他子线程结束且主线程执行完毕,主线程都会关闭。
  也就是说:主线程不等待该守护线程的执行完再去关闭。
  如果还有一个或以上的非守护线程则不会退出。
  
> 进程和线程的区别
  1.一个程序至少有一个进程,一个进程至少有一个线程
  2.线程的划分尺度小于进程,使得多线程程序的并发性高
  3.进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率
  4.从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统
    并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。
  '''
  线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。
  同时,线程适合于在SMP(多核处理机)机器上运行,而进程则可以跨机器迁移。 
  '''

'''
> 并发和并行
  并发:同一时刻只能有一条指令执行,但多个进程指令被快速轮换执行
  并行:同一时刻,有多条指令在多个处理器上同时执行 
'''

> 伪并行
  单核架构中,让线程以极短的时间间隔交替执行,从人的感觉上看它们就像在同时执行一样
  由于仅有一个运算单元,当线程皆执行计算密集型任务时,多线程可能会出现 1 + 1 < 2 的反效果
  
> 真并行
  只能在多核架构上实现
  对于计算密集型任务,巧妙地使用多线程或多进程将其分配至多个 CPU 上,通常可以成倍地缩短运算时间

> 多进程
  多核架构上时,为真正的并行
  许多人非常忌讳使用多进程,理由是进程操作(创建、切换)的时间开销太大了,而且会占用更多的内存。
  这种担心其实没有必要——除非是对并发量要求很高的应用(如服务器),多进程增加的时空开销其实都在
  可以接受的范围中。(自己本地跑跑可以使用多进程,上服务器不建议使用)
  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值