解析进程和线程的区别
进程
进程是一个具有独立功能的程序在一个数据集上的一次动态执行过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程是一种抽象的概念,从来没有统一的标准定义。
进程一般由程序,数据集合和进程控制块三部分组成。
进程具有的特性:
动态性:进程是程序的一次执行过程,是临时的,有生命期,是动态产生,动态消亡。
并发性:任何进程可以同其他进程一起并发执行。
独立性:进程是系统进行资源分配和调度的一个独立单位。
结构性:进程一般由程序,数据集合和进程控制块三部分组成
线程:
线程是程序执行中一个单一的顺序控制流,是程序执行流的最小单位,是处理器调度和分派的基本单位,一个进程可以有一个或多个线程,各线程之前共享程序的内存空间。一个标准的线程由线程ID,当前指令指针PC,寄存器和堆栈组成。
进程和线程的比较
解析进程的结构
内核把进程存放在叫做任务队列(task list)的双向循环链表中,链表中的每一项都是类型为task_struct,称为进程控制块(processing control block),PCB中包含一个具体进程的所有信息
进程id、用户id和组id
程序计数器
进程的状态(就绪,运行,阻塞)
进程切换时需要保存和恢复的CPU寄存器的值
描述虚拟地址空间的信息
描述控制终端的信息
当前工作目录
文件描述符,包含很多指向file结构体的指针
进程可以使用的资源上限(ulimit -a可查看)
输入输出状态:配置进程使用I/O设备
解析磁盘中的代码如何在计算机上运行的
首选通过用户给计算机下发指令,计算机去读取硬盘中的程序代码,并将程序代码加载到运行内存中,运行在内存中的代码通过给CPU发起指令执行请求,CPU在空闲的时候马上执行指令,如果CPU比较忙,则该指令需排队等待,依次进行指令处理,CPU执行指令,并根据指令的输出反馈相关结果,执行相关操作。
总结OOM原理,及处理方法
OOM即Out Of Memory“内存用完了”,在Java程序中比较常见。系统会选择一个进程将之杀死,在日志中messages中看到类似下面的提示
当JVM没有足够的内存来为对象分配空间并且垃圾回收器也没有空间可回收时,就会抛出这个error,因为这个问题已经严重到不足以被应用处理。
原因:
给应用分配内存太少:比如虚拟机本身可使用的内存太少。
应用用的太多,并且用完没有释放,浪费了,此时就会造成内存泄漏或内存溢出。
解决的办法:
- 限制Java进程的max heap,并且降低Java进程的worker数量,从而降低内存使用。
- 给系统增加swap交换空间。
结合进程管理命令,说明进程各种状态
进程状态
创建:进程在创建时需要申请一个空白的PCB,向其中填写控制和管理进程的信息,完成资源分配,如果创建无法完成,如资源不足,此时进程处于创建状态。
就绪:进程已准备好,已分配到所需资源,只要分配到CPU时间片就可立即执行
执行:进程处于就绪后被调用,进入执行状态
阻塞:正在执行的进程由于进行I/O请求而等待I/O的完成暂时无法继续运行,进入阻塞状态
终止:进程运行结束,或出现错误,或被系统终止
ps命令输出中进程的状态:
运行:running
就绪:ready
睡眠:分两种,可中断(interruptable)和不可中断(uninterruptable)
停止:stopped,暂停于内存,但不会被调度,除非手动启动
僵死:zombie,父进程结束前,子进程不关闭,杀死父进程可关闭僵死进程的子进程。
说明IPC通信和RPC通信实现的方式
同一主机
pipe 管道,单向传输
socket 套接字文件,双工通信
memory-mapped file 文件映射,将文件映射到内存,多个进程共享这块内存
shm shared memory 共享内存
signal 信号
semaphore 信号量
不同主机
RPC remote procedure call
MQ
标签:指令,线程,内存,进程,相关,执行,CPU From: https://www.cnblogs.com/m490545607/p/17418955.html