线程、进程之间的联系(一)

线程、进程的介绍

进程:进程是资源进行分配的单元 eg:IO,内存资源。。。
线程:线程是进行资源调度的单位 执行程序代码片段 真正执行的指令 例:操作数据的执行流
[main]Java中启动main方法是进程还是线程???
java中main方法启动的是一个进程也是一个主线程,main方法里面的其他线程均为子线程是一个线程也是一个进程,一个java程序启动后它就是一个进程,进程相当于一个空盒(分配了内存空间、JVM虚拟机实例)它只提供资源装载的空间,具体的调度并不是由进程来完成的,而是由线程来完成的。一个java程序从main开始之后,进程启动,为整个程序提供各种资源,而此时将启动一个线程,这个线程就是主线程,它将调度资源,进行具体的操作。Thread、Runnable的开启的线程是主线程下的子线程,是父子关系,此时该java程序即为多线程的,这些线程共同进行资源的调度和执行。
JAVA中内存模型:
内存模型的分配:创建一个java进程时会在内存中预留默认或指定的空间

  • 私有:虚拟机栈、本地方法栈、程序计数器
  • 共享:方法区、堆
  • 堆:创建的对象会放在堆中,静态变量、、
  • 虚拟机栈:运行程序时是一个个方法的调用,调用方法时会有一个栈,栈的特点是先进后出,
  • 将运行过的局部的变量、临时变量、下一步要执行的堆栈的地址信息都以栈的形式压进去,计算后出栈
  • 本地方法栈:java程序调用notify()等方法,这些方法与本地操作系统进行交互,产生的局部变量、临时变量会在本地方法栈
  • 程序计数器:程序下一步要执行的步骤所对应的虚拟地址

线程私有的:虚拟机栈、本地方法栈、程序计数器
线程共享的:方法区、堆区
在这里插入图片描述

进程和线程的关系:
1、创建进程会给分配相应的内存空间,创建线程不会给分配内存空间
2、一个进程创建可以包含多个线程,一个线程只隶属于一个进程
3、进程与进程是相互独立隔离的,若一个进程崩溃,不会影响到其他进程的正常执行, 线程是隶属于进程,线程在进程间可以共享空间,一个线程的崩溃会影响到其他线程的正常执行进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

  1. 简而言之,一个程序至少有一个进程,一个进程至少有一个线程.
  2. 线程的划分尺度小于进程,使得多线程程序的并发性高。
  3. 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
  4. 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
  5. 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。
    多线程编程的好处???
    答:在多线程程序中,多个线程被并发的执行以提高程序的效率,CPU不会因为某个线程需要等待资源而进入空闲状态。多个线程共享堆内存(heap memory),因此创建多个线程去执行一些任务会比创建多个进程更好
    注意:线程不是越多越好,线程的创建是依赖进程的,进程的每次创建都要分配内存,但是内存资源是有限的,无限多的创建进程,就会无限多的来占用内存资源,导致一部分的资源不是处理业务逻辑,而是存储基本的配置相关的信息.这是对资源的浪费
    Java进程和本地操作系统的关系?
    Java中创建的进程和线程最终会映射到本地操作系统的进程、线程模型上
进程线程
JAVARuntime.excethread
Linuxforx/vforxpthread_create

windows的进程、线程模型和Linux的进程线程模型不一致
Linux进程线程模型 : 进程 = 线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值