你了解操作系统中的进程线程吗?

作者:微信公众号:【架构师老卢】
7-4 16:0
48

概述:什么是进程?计算中的进程可以是独立的,也可以是协作的。独立进程不受其他进程的影响,而协作进程可能会受到其他执行进程的影响,从而在某些情况下提高效率。进程是一个正在运行的程序实例,在操作系统中是必不可少的。它具有内存、空间和资源,如 CPU、时间和 I/O 设备。通过唯一进程标识符 (PID) 标识,进程可以并发运行,并由操作系统管理,以有效地共享资源。进程通过IPC进行通信以传输数据。进程间通信 (IPC) 通过共享内存和消息传递实现进程交互。共享内存允许进程通过访问公共内存空间进行通信。这样可以直接读取和写入数据,但需要仔细同步以避免争用条件。消息传递涉及在进程之间发送消息以实现同步和协调。
  1. 什么是进程?
  • 计算中的进程可以是独立的,也可以是协作的。
  • 独立进程不受其他进程的影响,而协作进程可能会受到其他执行进程的影响,从而在某些情况下提高效率。
  • 进程是一个正在运行的程序实例,在操作系统中是必不可少的。
  • 它具有内存、空间和资源,如 CPU、时间和 I/O 设备。
  • 通过唯一进程标识符 (PID) 标识,进程可以并发运行,并由操作系统管理,以有效地共享资源。

  • 进程通过IPC进行通信以传输数据。

进程间通信 (IPC) 通过共享内存和消息传递实现进程交互。

  • 共享内存允许进程通过访问公共内存空间进行通信。这样可以直接读取和写入数据,但需要仔细同步以避免争用条件。
  • 消息传递涉及在进程之间发送消息以实现同步和协调。它通常用于分布式系统中,可以是同步的,也可以是异步的。
  • 示例:向邮箱发送邮件。send(mailbox, message)
  • send(message, destination):向指定目标发送消息。
  • receive(message, host):接收来自指定主机的消息。
  • 直接通信:进程必须明确命名收件人或发送方。
  • 示例:发送消息进行处理。send(p1, message)p1
  • 间接通信:使用邮箱(端口)发送和接收消息。多个进程可以共享一个邮箱。
  • 示例:向邮箱发送邮件。send(mailbox, message)

2. 什么是线程?

  • 它是进程中最小的执行单元,共享其内存空间。
  • 通过在进程内共享数据,线程可以更轻松地进行通信。

单线程

  • 它指的是程序一次只运行一个执行线程的执行模型。该程序按顺序处理一个又一个任务,而不会重叠。只有在当前任务完成后,下一个任务才会开始。
  • 这些程序更易于编写和调试,因为无需管理多个线程。这降低了竞争条件和死锁等问题的复杂性。
  • 如果任务涉及等待(例如,读取文件或网络操作),则整个程序将等待直到任务完成。
  • 例: JavaScript 是一种众所周知的单线程语言。它使用事件循环来处理异步操作,使程序即使在可能阻塞任务的情况下也能保持响应。

多线程

  • 它允许进程同时执行多个线程。每个线程代表同一程序中的一个单独的执行路径,共享相同的内存空间,但独立运行。
  • 并发性 — 多个线程通过在单个内核上交错执行,在线程之间快速切换来取得进展。
  • 并行性 — 多个线程在多核处理器的不同内核上同时运行。

多线程进程使用操作系统 API 来创建、管理和终止线程。线程并发运行,操作系统调度程序为每个线程分配 CPU 时间片。它们通过共享内存进行通信,并使用互斥锁和信号量等同步机制来协调对共享资源的访问。

  • 主线程 — 将任务分配给您的工作人员(线程)。
  • 工作线程 (线程) — 并发执行任务,共享内存和资源。
  • 当多个工作线程需要相同的内存和资源时,会导致潜在的延迟。
  • 管理冲突的方法,例如等待轮次或在资源空闲时发出通知。
  • 示例:Java 以其多线程功能而闻名,使用类或实现接口。Python 的模块提供了一种实现多线程的简单方法。该类用于创建和管理线程,而 and 类用于处理同步。C# 使用命名空间来创建和管理线程。该类以及 and 等同步原语有助于实现多线程。在 C++ 中,该库用于创建和管理线程。同步是使用互斥锁、条件变量和库中的其他同步原语进行处理的。ThreadRunnablethreadingThreadLockSemaphoreSystem.ThreadingThreadlockMonitor<thread><mutex>

3. 线程和进程的区别

  • 进程 — 操作系统管理的独立执行单元。它也是资源分配和调度的基本单元。它有自己的独立虚拟地址空间,包括代码、数据和堆栈段。它通过进程间通信 (IPC) 机制(如管道、消息队列和共享内存)与其他进程进行通信。它需要更多的资源来创建和管理。每个进程都需要自己的内存空间和操作系统资源。由于需要单独的内存空间和额外的资源,因此开销更高。
  • 线程 — 进程中的轻量级执行单元。它也是执行调度的基本单位。它共享进程的虚拟地址空间,但有其堆栈。由于它们共享相同的内存空间,因此它在同一进程中更有效地进行通信。它需要更少的资源。同一进程中的多个线程共享资源,使它们更加轻量级。降低开销,因为线程在同一进程中共享资源和内存。

4. 什么是并发编程?

它涉及在单个程序中同时执行多个任务。

  • 多线程 — 在单个进程中使用多个线程。
  • 多处理 — 使用多个进程来执行任务,每个进程都有自己的内存空间。适用于可以并行化的 CPU 密集型函数。

并发编程中的常见挑战

  • 多个线程/进程争用相同的资源可能会导致性能下降。
  • 当 2 个或更多任务无限期地等待彼此释放资源时发生。
  • 共享数据可以跨多个线程安全地访问和修改。
阅读排行