【计算机基础】线程与进程

  |   0 评论   |   0 浏览

基础概念

并发和并行

数字计算机的发展动力:做的更多和更快。

并发:同时具有多个活动的系统。【多进程导致并发】

并行:并发使一个系统运行的更快。【同时执行多条指令称为指令并行】

进程

进程是什么?

  • 进程是操作系统对一个正在运行的程序的抽象。
  • 进程是操作系统进行资源分配和调度的独立单位。

为什么这样做?

操作系统分时处理各个程序能够上去像同时运行多个程序。——并发

怎么做到的?

每一个进程都有自己的上下文,上下文包括跟踪进程运行状态所需要的所有信息(例如:PC、寄存器文件当前值、主存内容)。

进程切换就是保存当前进程上下文,恢复新进程的上下文。进程间切换就是控制权转移。

进程数和CPU个数的关系?

进程数可以大于CPU的个数,多核处理器能够并发执行多个进程。

进程间通信

因为进程间有独立的虚拟地址空间,想要和其他流通信,控制流必须使用某种显式的进程间通信IPC机制。

  • 管道pipe:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
  • 命名管道FIFO:有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
  • 消息队列MessageQueue:消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
  • 共享存储SharedMemory:共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信
  • 信号量Semaphore:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
  • 套接字Socket:套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。
  • 信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

虚拟存储器

虚拟存储器指的是每个进程都在独占地使用主存的假象。每个进程看到的是一致的存储器,称为虚拟地址空间。

每个进程看到的虚拟地址空间由大量准确定义的区构成,每个区都有专门的功能。

地址从低到高分别为:程序代码和数据、堆(存放数据,可以动态收缩)、共享库、栈(实现函数调用,同样动态收缩)、内核虚拟存储器(总是驻留在内存中,是操作系统的一部分)。

线程

什么是线程?

  • 线程是进程中的执行单元。一个进程至少拥有一个线程。
  • 线程是CPU调度和分配的基本单位。
  • 线程由内核自动调度,每个线程都有它自己的线程上下文(唯一的整数线程ID(TID)、栈、栈指针、程序计数器、通用的目的寄存器和条件码)。
  • 同一个进程中的线程之间共享虚拟空间中除线程上下文的部分。

线程间关系?

  • 一个线程可以创建和撤销另一个线程。
  • 同一个进程中的线程可以并行执行。

线程和进程的关系?

  • 进程由线程组成。
  • 每个线程运行在进程的上下文中,共享同样的代码和全局数据。
  • 有了线程,一个进程中就可以有多个控制流。

为什么需要线程?

当有多处理器的时候,多线程也是一种使程序可以更快运行的方法,并发。

同时多线程(超线程)是一项允许一个CPU执行多个控制流的技术。

线程和进程的区别?

  • 进程和线程是不同的操作系统资源管理方式。
  • 进程间都是独立的地址空间,同一个进程的线程间存在共享的地址空间。
  • 但是一个线程死掉,对应的进程就会死掉。但是进程间不会相互影响,保护模式下,一个进程死掉不会影响其他进程。
  • 在执行方面。一个线程的上下文要比进程的上下文小得多,线程的上下文切换要比进程的上下文切换快得多。
  • 线程是处理器调度的基本单位,进程不是。

多线程通信

  • 全局变量。进程中的线程间内存共享,这是比较常用的通信方式和交互方式。注:定义全局变量时最好使用volatile来定义,以防编译器对此变量进行优化。
  • Message消息机制。常用的Message通信的接口主要有两个:PostMessage和PostThreadMessage。PostMessage为线程向主窗口发送消息。而PostThreadMessage是任意两个线程之间的通信接口。
  • CEvent对象。CEvent为MFC中的一个对象,可以通过对CEvent的触发状态进行改变,从而实现线程间的通信和同步。

标题:【计算机基础】线程与进程
作者:limanting
地址:https://blog.manxiaozhi.com/articles/2021/09/29/1632915664191.html