3、进程线程及其管理

进程线程及其管理

1、 进程和线程的区别

进程是cpu资源分配的最小单位,线程是cpu调度的最小单位。

进程:

  • 正在运行的程序,是系统进行资源分配和调用的最小单元
  • 每一个进程需要掌握内存、处理器、打开的文件等内存空间和系统资源
  • 进程是被内核创造和管理的
  • 进程的复制(fork)代价高

线程:

  • 是进程中的单个顺序控制流,是一条执行路径
  • 线程关注的是中央处理器的运行,而不是内存等资源的管理
  • 一个进程根据线程的数量可以分为单线程程序和多线程程序
  • 多个线程共享进程的资源
  • 线程有自己的堆栈、程序计数器、局部变量(在运行中必不可少的资源),但线程之间没有单独的地址空间(地址空间是系统给进程分配的虚拟内存。线程栈是线程自己独有的,其余是共享的,他们都在虚拟内存里),一个线程死掉就等于整个进程死掉。
  • 创建线程只需要堆栈、程序计数器、局部变量这些资源,相对进程高效很多

举例:

  • 打开QQ,打开一个进程,在这个进程中,传输文字需要执行一个线程,传输语音需要执行一个线程

多进程的意义:

  • 保证计算机能在一个时间段执行多个任务,如听音乐,逛淘宝
  • 提高CPU的利用率,CPU是在不同进程间高效切换,但是人感觉不出来,认为是同时进行

多线程的意义:

  • 减少了进行的频繁切换,线程调度小,节约资源
  • 帮助进程抢占资源,提高了应用程序的利用率
  • 对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

2、并发与并行

参考:https://blog.csdn.net/wm_1991/article/details/50257269

  • 并发是逻辑上的同时发生,是在一段时间内运行多个程序,但是CPU的高效切换,人感觉不出来,认为是同时发生。并发的关键是你有处理多个任务的能力,不一定要同时。
  • 并行是物理上的同时发生,是在一个时间点运行多个程序,是真正的同时发生,如多个人同时访问同一台服务器。并行的关键是你有同时处理多个任务的能力。
  • 并行计算与分布式计算都是运用并行来获得更高性能,化大任务为小任务。简单说来,如果处理单元共享内存,就称为并行计算,反之就是分布式计算。也有人认为分布式计算是并行计算的一种特例。

3、一些定义

地址空间

分配给一些程序、文件等的内存空间,进程有被分配内存空间,同一个进程下的线程共享这些内存,进程是分配资源,线程是执行命令

程序计数器

当前正在执行的程序指令在存储器中的地址(位置)

寄存器

  • 为了配合CPU的快速存储空间
  • 指令在执行前被加载到寄存器中
  • 与主存储器分开

  • 按需分配给程序的内存区域
  • 对于整数,即固定大小的变量
  • 在java中,new的对象在堆中,复杂的动态变量,不连续,大小未知
  • 是大家共有的空间,分全局堆和局部堆。全局堆就是所有没有分配的空间,局部堆就是用户分配的空间。

  • 按需分配给程序的内存区域
  • 是个线程独有的,保存其运行状态和局部自动变量的
  • 存放像整型等尺寸固定的变量

进程线程及堆栈关系的总结

https://blog.csdn.net/echoisland/article/details/6403763

4、一个进程的运行

  • 是有一系列的指令
  • 指令被放到寄存器中
  • 相应的数据值也被放在寄存器中
  • 当程序执行完毕,结果被保存在主存中

5、一个进程需要追踪哪些资源

  • 地址空间:有多少内存被分配给该进程
  • 程序计数器:当前指令的地址
  • 打开的文件
  • 寄存器
  • 栈:变量被存在哪
  • 状态:运行、等待还是其他
  • 全局变量:整个运行程序可见的

6、父进程和子进程

参考:https://wuguiyunwei.com/index.php/2017/06/18/979.html

  • 在UNIX里,除了进程0(即PID=0的交换进程,Swapper Process)以外的所有进程都是由其他进程使用系统调用fork创建的,这里调用fork创建新进程的进程即为父进程,而相对应的为其创建出的进程则为子进程,因而除了进程0以外的进程都只有一个父进程,但一个进程可以有多个子进程。

  • 操作系统内核以进程标识符(Process Identifier,即PID)来识别进程。进程0是系统引导时创建的一个特殊进程,在其调用fork创建出一个子进程(即PID=1的进程1,又称init)后,进程0就转为交换进程(有时也被称为空闲进程),而进程1(init进程)就是系统里其他所有进程的祖先。

  • 子进程会复制父进程的内存分配、注册状态、打开文件等,子进程是父进程的精准的赋值,但是IDs不同

7、进程状态

  • 0 - 在处理器上运行
  • S - 睡眠(等待事件完成)
  • R - 可运行(进程在运行队列中)
  • Z - 僵尸进程

8、守护进程

  • 守护程序是处于休眠状态的进程,直到特定服务需要它们为止
  • 通常,他们的名字以'd'结尾
  • 示例是:打印机守护程序,邮件守护程序

9、操作进程

  • Windows:任务管理器
  • ps: 显示进程
  • top:性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。
    q:退出程序。 
    k: 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
    u:(返回)后跟一个用户名(返回),以查看属于该用户的进程
  • nice -10 perl myProg.pl:nice将以较低的优先级运行一个程序,这样它就不会阻塞CPU,范围为-20-20,-20是最高的优先级,但是你不允许设置小于0的优先级(除非你是root用户)
  • kill ( kill -15 25718 ):杀死进程,其中-15是信号编号表示“彻底停止该过程”(即退出正在使用的所有文件)https://www.cnblogs.com/Juvenile/p/7871796.html
  • top和kill都能杀死进行
  • 任务计划:at、batch、corn
    at:at [OPTION]... TIME 在未来某一时刻一次性执行某任务。
    batch:而是在系统空闲时自动执行指定的任务。
    corn:周期性任务计划

10、信号

  • 信号是用于控制进程的UNIX机制
  • 信号是需要进程立即关注的消息(进程使用信号来管理进程)
  • 每一个信号都有默认相关联的指令
  • 信号由异常产生: 
    企图使用非法指令
    用户按下中断键
    子进程调用退出或异常终止
信号名 数字号 含义
SIGINT 2 进程中断,与快捷键Ctrl-C等效
SIGTRAP 5 跟踪陷阱(主要在调试器中使用)
SIGKILL 9 杀死(由kill命令生成)
SIGBUS 10 总线错误(无效的内存引用)
SIGSEGV 11 细分违规
SIGTERM 15 软件终止信号(默认终止信号)

快捷键控制进程

快捷键 数字号 含义
Cntrl C 2 进程中断
Cntrl S 19 暂停显示输出
Cntrl Q 18 从Ctrl S恢复或继续输出
Cntrl Z 20 暂停进程

11、处理信号

  • 如果未捕获某些信号,或者忽略了它们,则会生成核心映像转储
    例如:细分违规核心已转储
    造成:当进程尝试在其内存映射之外读取时引起
  • 程序中可能捕获许多信号。 程序员然后可以:
    忽略信号 执行默认操作 执行程序指定功能
  • Debuggers:调试器是特殊的工具,可以捕获信号,以便程序员可以查看为什么程序可能出错

猜你喜欢

转载自www.cnblogs.com/Stephanie-boke/p/11974434.html