进程和线程和协程总结

88 阅读5分钟

简述

graph TD
进程 --> 进程通信的方式
进程 --> 进程调度算法
进程 --> 孤儿进程 
进程 --> 僵尸进程
进程 -->  解决僵尸进程 
两个问题 --> 线程和协程的区别
两个问题 -->进程和线程的区别

进程

进程通信的方式

常见7种 管道 信号 消息队列 共享内存 内存映射 信号量 socket

  1. 管道创建管道生成两个文件描述服,一个对应的管道的读端一个对映管道的写端,匿名管道 用于具有亲缘关系进程间的通信
  2. 有名管道 (FIFO),与一名管道不同 他提供 了一个路径名与之关联,以FIFO的文件形式存在于文件系统中 并且其打开方式与打开一普通文件是一样的,通过FIFO与之不相关的进程 也能进行通讯
  3. 信号 信号可以导致一个正在运行的进程被某一个正在运行的进程异步中断,转而处理某一个突发事件 。
  4. 消息队列 消息队列就是一个消息的链表 可以把消息看 这是一个记录 具有特定的格式 以及特定的优先级队消息 对有写权限的进程 可以向消息队列中按照一定的规则添加消息 对消息有读权限的进程 则可以从消息队列中读者消息。
  5. 共享内存 共享内存允许 两个或者多个进展 共享物理内存的同一块区域
  6. 内存映射 内存映射是磁盘文件的数据 映射到内存用户通过修改内存就能修改磁盘文件
  7. 信号量 信号量主要用来解决进程 和线程并发执行时的同步问题 进程同步是为了并发完成共同任务采用某种条件来协调他们的工作 对信号量的 操作分别为 P操作和 V操作, P操作就是将信号量减1 , V操作就是将信号量值加一 , 信号量值小于等于0之后再进行P操作时,当前线程或进程就会被阻塞 直到另外的进程或线程执行的V操作将信号量值增加到大于0。
  8. Socket套接字 网络中不同主机上的应用进程之间进行双向通讯端点抽

进程调度算法有哪些

1. 先来先服务 调度算法

2. 短作业优先调度算法

3. 优先级调度算法

4. 时间片轮转调度算法

5.多级反馈队列调度算法


1. 先来先服务调度算法 这种严格的先进 先出的排队方案 
2. 短作优先调度算法 从和后选队列中 选择一个或者多个运行最短的时间加入内存 
3. 优先级调度算法 
4. 时间片轮转调度算法 
5. 时间片轮转调度算法  每次给队首分配时间片 然后时间片用完 他又将这个队首作业队尾轮换调度。
6. 多级反馈队列调度算法是 时间片轮换调度算法和优先级调度算法,通过动态调整时间片大小和进程优先级实现。

孤儿进程

 孤儿进程过来 进程是指一个父进程退出后
 而他的一个或者多个子进程仍在运行 
 这些子进程成为孤儿进程 这是过进程 会被一个PID为1的进程所收养
 孤儿儿进程一般不会产生危害 

僵尸进程

僵尸进程是指一个进程使用fork()函数创建子进程 
如果子进程退出 而父进程并没有调用wt(),
wtpid()或者威特批系统调用取得紫禁城的宗旨状态 
紫禁城的描述福仍然保存在系统中占用系统资源 
这种进程称为僵尸进程 

解决僵尸进程

 及时调用父进程中使用wt()或者wtpid方法, 
 子进程退出的时候,内核都会给父进程一个SIGCHID信号,
 可以建立捕捉信号的处理函数,在函数体中调用wt(),wtpid()函数,
 清理退出的子进程,达到防止僵尸进程的目的。

进程和线程的区别

地址空间 开销 并发 内存

 1.进程有独立的地址空间 线程没有独立的地址空间 只有自己的独立的堆栈和局部变量 
 2.进程的并发性较低 线程的并发性较高  
 3.切换进程和线程的上下文时 进程的切换时间远远大于线程上下文切换资源较大 效率低。
 4.系统在运行的时候会为每个进程分配不同的内存空间 对于线程除了CPU外 系统不会为线程分配内存 (线程使用的资源来自它所属的进程) 线程组之间只能共享资源 
 5.一个进程崩溃 在保护模式下 不会对其他进程产生影响 但是一个线程崩溃 它所属的进程会挂掉 , 多进程程比多线程要健壮。

线程和协程的区别

操作系统的资源 线程的创建切换停止都非常消耗资源 创建携程不需要调用操作系统的功能 编程语言自己就能够完全协程比线程轻量很多
线程和进程都是同步机制 而协程是异步机制;
操作系统对于线程开辟数量有限制 而协程数量可以达到上万