java多线程:1 基础知识

来源:互联网 发布:淘宝电信卡实名认证 编辑:程序博客网 时间:2024/05/20 14:23

线程与进程的区别:
(1) 进程:一个具有独立运行环境的单元,拥有基本的、私有的运行环境和资源,尤其是内存空间。重点在系统调度和单独的单位。
一个进程可以看做我们电脑上运行的一个程序或者应用程序,例如你的chorm浏览器可以看做一个进程。
(2) 线程:轻量型的进程,是CPU调度和分派的基本单位,比进程更小的能独立运行的基本单位,线程自己基本上不拥有系统资源,因此在多个线程访问内存资源(共同对象、资源)的时候,需要特殊处理。在运行时,只是暂用一些计数器、寄存器和栈 。

进程和线程的关系:1、一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程(通常说的主线程)。2、资源分配给进程,同一进程的所有线程共享该进程的所有资源,因此当进程中的一个线程出现OOM,那么这个进程的所有线程都结束运行。3、线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。4、处理机分给线程,即真正在处理机上运行的是线程。5、线程是指进程内的一个执行单元,也是进程内的可调度实体。

从三个角度来剖析二者之间的区别
1、调度:线程作为调度和分配的基本单位(由cpu进行调度),进程作为拥有资源的基本单位(由系统进行调度)。
2、并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可以并发执行。
3、拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于该进程的资源。

为什么使用多线程

  1. 利用多核CPU
    现在的cpu都是多核,如果只有一个线程的话,那么该线程只能运行在单一cpu上,那么就造成了浪费。因此通过运行在不同cpu上的线程,提高效率。
    说明:以前操作系统中学的单核的多线程实现,其实是伪多线程,实际在运行的只是一个线程,通过cpu的时间片划分,切换线程执行,实现看起来是多个线程执行。但是因为只有一个cpu,同一时刻只有一个线程运行。
    cpu的多核同样带来一个问题,这也算是多线程带来的问题:线程的通讯、公共资源的访问。
    例如:同样是卸货,一个人(线程)和多个人(线程)进行卸货,整个过程的执行效率是不一样的,当然这中间可能涉及到多个人怎么获取货物(多线程访问卡车获取货物,大家排队取,还是谁抢到算谁的),但是如何搬运(cpu)就是互相独立的了,把货物存放到另一个地方这个也需要特殊处理(多线程并发访问存货位置,是按照货物序号,还是先到先存放)。
  2. 解决单核cpu的阻塞,这个主要是单核cpu时,如果只有一个线程,那么当该线程因为网络问题,或者其他原因,
  3. 便于建模
    这是另外一个没有这么明显的优点了。假设有一个大的任务A,单线程编程,那么就要考虑很多,建立整个程序模型比较麻烦。但是如果把这个大的任务A分解成几个小任务,任务B、任务C、任务D,分别建立程序模型,并通过多线程分别运行这几个任务,那就简单很多了。

多线程的最直接的意义就是:最大程度的利用多核cpu。因为cpu调度的底层是线程,因此如果是4核cpu,那么只有一个线程的话,那么永远有3个cpu是浪费的。

原创粉丝点击