进程和线程

Youky ... 2021-10-8 操作系统 About 2 min

# 进程和线程

# 并发和并行

  • 并发是指宏观上多个任务同时运行,实际上是交替运行的
  • 并行是指多CPU的情况下,多个线程微观上同时运行

# 进程和线程的区别

  • 地址空间角度:一个进程内至少要有一个线程,多个线程可以共享进程的地址空间,而进程间的地址空间是独立的
  • 进程是资源分配的基本单位,同一个进程内的线程共享进程的资源
  • 线程是处理器调度的基本单位

# 为什么需要线程

进程切换的开销很大:

  • 处理机的上下文切换
  • 与进程相关的数据结构的改变,如页表、各种队列等

因此引入了线程:一个进程分为的多个执行任务的单元体,只为其分配处理机。线程的切换只需切换必须的与处理机相关的信息,减少了开销。

# 进程的状态

  • 就绪:一个进程获得了处理机以外的所有资源,得到处理机即可运行的状态
  • 运行:正在处理机上运行
  • 阻塞:也称为等待状态,进程在等待某件事发生(如等待IO完成)而暂时停止运行

# 进程间通信IPC

# 信号

是一种“发布-订阅”的模式,由操作系统事先定义,接收到该信号的进程可以采取自定义的响应行为

# 信号量

信号量是一种特殊的变量,对它的操作通过PV原语,P表示减少,V表示增加

# 管道

管道是一种半双工通信方式,如在Linux中用管道操作符|表示两个两个命令之间的数据通信,前一个命令的标准输出会作为下一个命令的标准输入

# 共享内存

允许不同进程共享一段物理内存,进程将该段共享内存映射到自己的地址空间,然后像访问普通内存一样对其进行访问。

不同进程通过向共享内存读写数据来交换信息。

  • 优点:简单高效。
  • 缺点:存在并发问题

# 消息队列

  • 是一个消息的链表,保存在内核中
  • 提供了有格式的数据
  • 是异步的,接收者必须通过轮询消息队列,才能收到消息

# 套接字Socket

  • Socket可以用于不同计算机的进程之间,也可以用于同一台计算机的不同进程之间
  • 进行通信的进程首先各自创建一个socket,包含主机号和端口号,声明自己接受来自某端口地址的数据
  • 进程通过socket把消息发送到网络层,网络层通过主机地址将其发送到目的主机,目的主机通过端口号将消息发送到目的进程
Last update: November 27, 2021 21:15
Contributors: youky7