首页 > 系统相关 >3.进程相关

3.进程相关

时间:2023-05-21 18:35:42浏览次数:38  
标签:指令 线程 内存 进程 相关 执行 CPU

解析进程和线程的区别

进程

程是一个具有独立功能的程序在一个数据集上的一次动态执行过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程是一种抽象的概念,从来没有统一的标准定义。

进程一般由程序,数据集合和进程控制块三部分组成。

进程具有的特性:

动态性:进程是程序的一次执行过程,是临时的,有生命期,是动态产生,动态消亡。

并发性:任何进程可以同其他进程一起并发执行。

独立性:进程是系统进行资源分配和调度的一个独立单位。

结构性:进程一般由程序,数据集合和进程控制块三部分组成

线程:

线程是程序执行中一个单一的顺序控制流,是程序执行流的最小单位,是处理器调度和分派的基本单位,一个进程可以有一个或多个线程,各线程之前共享程序的内存空间。一个标准的线程由线程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,因为这个问题已经严重到不足以被应用处理。

原因:

给应用分配内存太少:比如虚拟机本身可使用的内存太少。

应用用的太多,并且用完没有释放,浪费了,此时就会造成内存泄漏或内存溢出。

解决的办法:

  1. 限制Java进程的max heap,并且降低Java进程的worker数量,从而降低内存使用。
  2. 给系统增加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

相关文章

  • 荐号 | Android 相关的公号推荐
    之前有部分人觉得我的文章更新慢,那么今天就来给大家推荐一些Android相关的其他公号,这些公号的作者都是我比较熟的圈内朋友,也是大家熟知的比较活跃的一些分享者,他们在业余时间也在进行原创分享,不过阅读量都不怎么大,所以很希望这些好的原创文章能被更多的人看到,大家可以按照自己的......
  • Python多进程编程-进程间共享数据(Value、Array、Manager)
    转载:(14条消息)Python多进程编程-进程间共享数据(Value、Array、Manager)_managervalue_Loadinggggg的博客-CSDN博客Value、Array是通过共享内存的方式共享数据Manager是通过共享进程的方式共享数据。Value\Array实例代码:importmultiprocessing#Value/Arraydeffunc1(a,arr......
  • Python并发编程:为什么传入进程池的目标函数不执行,也没有报错?
    转载:Python并发编程:为什么传入进程池的目标函数不执行,也没有报错?-知乎(zhihu.com)python初学者使用进程池时,很容易掉坑里! python并发编程中,这个问题是新手经常容易犯的错,十个人,大概有九个都会掉入其中。借此机会,对该问题的前因后果做个记录,分享于此!一、错误代码复现我......
  • python 进程池multiprocessing.Pool
    转载:python进程池multiprocessing.Pool(44)-知乎(zhihu.com)python进程池Pool和前面讲解的python线程池类似,虽然使用多进程能提高效率,但是进程的创建会消耗大量的计算机资源(进程Process的创建远远大于线程Thread创建占用的资源),线程是计算机最小的运行单位,连线程都需要使用线程......
  • Matlab字符串相关操作-拼接、格式化
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。......
  • python基础-进程池、submit同异步调用、shutdown参数、ProcessPoolExecutor进程池、进
    转载:(14条消息)python基础-进程池、submit同异步调用、shutdown参数、ProcessPoolExecutor进程池、进程池ftp_pythonsubmit_易辰_的博客-CSDN博客引入进程池在学习线程池之前,我们先看一个例子frommultiprocessingimportProcessimporttimedeftask(name):print(......
  • Python3.8多进程之共享内存
    转载:Python3.8多进程之共享内存-知乎(zhihu.com)最近发了个宏愿想写一个做企业金融研究的Python框架。拖出Python一看已经更新到了3.8,于是就发现了Python3.8里新出现的模块:multiprocessing.shared_memory。随手写了个测试。生成一个240MB大小的pandas.DataFrame,然后转换成nu......
  • python进程池ProcessPoolExecutor的用法与实现分析
    转载:(14条消息)【Python随笔】python进程池ProcessPoolExecutor的用法与实现分析_utmhikari的博客-CSDN博客concurrent.futures—Launchingparalleltasks—Python3.11.3documentation在python开发期间,由于GIL的原因,不能直接采用并行的方式处理代码逻辑。在multiprocess......
  • 树相关知识点--零碎笔记
    深入理解前中后序二叉树的前中后序遍历是什么?前中后序遍历,即二叉树结构的前中后位置前序遍历-即刚刚进入一个节点的时候中序遍历-即进入节点之后未离开节点之前后序遍历-即即将离开第一个节点的时候前中后序是遍历二叉树过程中处理每一个节点的三个特殊时间点前--刚刚进入一个二......
  • 数据库相关概念
    一:概念分析   数据库系统:分为两部分:一部分是数据库按一定的方式存储数据;另一部分数据库管理系统,为用户及应用程序提供数据访问,并具有对数据库进行管理、维护等功能。   数据库:若干数据的集合体。数据库要由数据库管理系统进行科学的组织和管理,以确保数据库的安全性和完......