进程,线程,同步,互斥傻傻分不清楚。

目录

  • 知识积累
  • 进程互斥
  • 进程同步
  • 进程通信
  • 管程
  • 进程与线程的区别
  • 线程的实现方式

知识积累

(注:建议大家直接跳过该模块,供下文阅读时查找)

1.并行与并发的区别

并发:两个或多个事件在同一时间间隔内发生
并行:两个或多个事件同一时刻发生

2.用户态和核心态

用户态(目态, 常态):用户程序或者核外操作系统,只执行非特权指令
核心态(管态, 特态):运行操作系统内核,可执行非特权指令和特权指令

3.原语

原语是指完成某种功能且不被分割、不被中断执行的操作序列。原语不能实现并发!
进程控制原语:进程的建立、进程的撤销、进程的等待和进程的唤醒。

4.多核CPU和多CPU的区别

多核CPU和单核多CPU的区别主要在于性能和成本。多核CPU性能最好,但成本最高;多CPU成本小,便宜,但性能相对较差,目前多为多核CPU。

5.单进程多线程与多进程单线程

单进程多线程与多进程单线程的比较,前者速度要快于后者,这是因为,多进程单线程的CPU切换,是从一个进程到另一个进程,而单进程多线程的CPU切换则只在一个进程内,每个进程|线程都有自己的上下文堆栈保存,进程间的切换消耗更大一些。
多进程单线程也有优点:它提供了一种保护机制,当一个进程(node)内部读取出错时,master可以让它重启,这使得其它进程没有崩溃(包括master),如Nginx,JAVA。而单进程多线程,一个线程出错,整个进程都有可能挂掉,而且单进程多线程的实现也非常困难。

6.什么是操作系统内核:

操作系统内核是指大多数操作系统的核心部分。它由操作系统中用于管理存储器、文件、外设和系统资源的那些部分组成。操作系统内核通常运行进程,并提供进程间的通信。

7.临界资源和临界区

  1. 临界资源
    临界资源是一次仅允许一个进程使用的共享资源。 各进程采取互斥的方式,实现共享的资源称作临界资源。属于临界资源的硬件有,打印机,磁带机等;软件有消息队列,变量,数组,缓冲区等。诸进程间采取互斥方式,实现对这种资源的共享。

  2. 临界区
    每个进程中访问临界资源的那段代码称为临界区(criticalsection),每次只允许一个进程进入临界区,进入后,不允许其他进程进入。不论是硬件临界资源还是软件临界资源,**多个进程必须互斥的对它进行访问。**多个进程涉及到同一个临界资源的的临界区称为相关临界区。使用临界区时,一般不允许其运行时间过长,只要运行在临界区的线程还没有离开,其他所有进入此临界区的线程都会被挂起而进入等待状态,并在一定程度上影响程序的运行性能。

  3. 临界区是一种轻量级的同步机制,与互斥和事件这些内核同步对象相比,临界区是用户态下的对象,即只能在同一进程中实现线程互斥。 因无需在用户态和核心态之间切换,所以工作效率比较互斥来说要高很多。虽然临界区同步速度很快,但却只能用来同步本 进程内的线程,而不可用来同步多个进程中的线程。
    转自https://blog.csdn.net/weixin_41413441/article/details/80548683

进程和线程互斥:

  1. 互斥是由竞争资源产生
  2. 资源竞争带来问题:死锁问题,饥饿问题
  3. 进程的互斥要求 某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。
  4. 互斥量用于进程的互斥, 互斥量的加锁和解锁必须由同一进程分别对应使用,为协调共同对一个共享资源的单独访问而设计的。
  5. 互斥的实现方法:(1)关中断 (2)加锁 (3)硬件指令(TS,Swap) (4)信号量(整型信号量,记录型信号量, And型信号量, 信号量集)

进程和线程同步:

  1. 同步是由合作形成的。
  2. 某些进程为完成同一任务需要分工协作,由于合作的每一个进程都是独立地以不可预知的速度推进,这就需要相互协作的进程在某些协调点上协 调各自的工作。当合作进程中的一个到达协调点后,在尚未得到其伙伴进程发来的消息或信号之前应阻塞自己,直到其他合作进程发来协调信号或消息后方被唤醒并继续执行。这种协作进程之间相互等待对方消息或信号的协调关系称为进程同步。 在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。
  3. 信号量用于进程的同步,信号量可以由一个进程释放,另一个进程得到,为控制一个具有有限数量用户资源而设计。信号量不一定是锁定某一个资源,而是流程上的概念,比如:有A,B两个进程,B进程要等A进程完成某一任务以后再进行自己下面的步骤,这个任务 并不一定是锁定某一资源,还可以是进行一些计算或者数据处理之类。
  4. 同步的实现方法:(1)信号量(记录型信号量, And型信号量, 信号量集) (2)管程(注:这两种方法实现让权等待)
  5. 进程同步机制应遵循的原则有空闲让进,忙则等待,有限等待,让权等待(当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入“忙等”状态)。

进程通信

  1. 并发进程之间的交互必须满足两个基本要求:同步和通信
    2.进程同步是一种进程通信,通过修改信号量,进程之间可建立起联系,相互协调运行和协同工作。**但是信号量与PV操作只能传递信号,没有传递数据的能力。**有些情况下进程之间交换的信息量虽很少(仅仅交换某个状态信息),但很多情况下进程之间需要交换大批数据,例如,传送一批信息或整个文件,这可以通过一种新的通信机制来完成,进程之间互相交换信息的工作称之为进程通信IPC
  2. 高级通信包括三种:共享存储系统(有的地方称作共享内存区)、消息传递系统(有的地方称作消息队列)、管道(有的地方也成为共享文件)。
  3. 进程同步与进程通信比较
    同步主要是临界区、互斥、信号量
    进程间通信是管道、内存共享、消息队列、信号量、套接字

管程:

  1. 管程定义:管程 (英语:Moniters,也称为监视器) 是一种程序结构,一个管程定义了一个数据结构和能为并发进程所执行的一组操作,这组操作能同步进程和改变管程的数据。
  2. 为什么引入管程:信号量机制的引入解决了进程同步的描述问题,但信号量的大量同步操作分散在各个进程中不便于管理,还有可能导致系统死锁。把所有进程对某一种临界资源的同步操作都集中起来,构成一个所谓的秘书进程。凡要访问该临界资源的进程,都需先报告秘书,由秘书来实现诸进程对同一临界资源的互斥使用。
  3. 重要特性:管程是一种高级的同步原语,任意时刻管程中只能有一个活跃进程。它是一种编程语言的组件,所以编译器知道它们很特殊。
  4. 管程与管道的区别:管程实现进程的同步,管道实现进程的通信。
  5. 管程实现:霍尔管程, 汉森管程(java实现参考文章

线程的引入

  1. 为什么要引入线程:由于进程是一个资源的拥有者, 因而在创建、撤消和切换中,系统必须为之付出较大的时空开销(I/O设备,内存空间,PCB)。 为了提高并发程度,引入了线程。

  2. 进程与线程之间的区别

    进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 进程至少包括一个主线程,还有工作线程。

    线程:进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一些在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。

    区别
    (1)进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间。
    (2)管程实现了进程同步,而不是线程同步。
    (3)线程通信就是进程范围内主线程与工作线程 或者 工作线程之间的通信,进程通信一般是指不同进程间的线程进行通讯,由于地址空间不同,因此需要使用操作系统相关机制进行“中转”,比如共享文件、管道、SOCKET。

线程的实现方式

  1. 内核支持线程(KSP):
    优点:由操作系统对线程进行控制,可以实现单进程多核并行。
    缺点:线程调度和切换需要在核心态进行,所以用户态线程需要切换到核心态,对于处于用户进程中处于用户态下的线程切换开销较大。

  2. 用户级线程(ULT):
    优点:(1)内核完全不知道用户级线程的存在,用户可以创建任意多个线程。(2)线程切换不需要转换到内核空间,节省了模式(用户态,核心态)之间的切换时间。(3)调度算法可以是进程专用的,而不依赖于OS低级调度算法(4)可以在不支持线程机制的平台上实现多线程。

    缺点:(1)采用轮转法调度以进程为单位(为进程分配时间片),而KSP则以线程为单位。造成资源分配不均。(2)当一个线程阻塞,进程内其它线程也会被阻塞。 而在KSP中,进程中的其它线程仍然可以运行。(3)ULT不利于多处理机进行多重处理,内核每次给一个进程一个核,因此进程中仅有一个线程能执行,在该线程放弃CPU之前,其它线程只能等待。

  3. 混合式线程:
    优点:KST+ULT,在组合方式线程中,同一个进程内的多个线程可以同时在多处理器上并行执行,而且在阻塞一个线程时并不需要注意整个进程阻塞。
    实现方式:
    (1)多对一模型(多用户一核),具体形式与ULT相似,只有在用户线程需要访问内核时,才将其映射到一个内核控制线程上。
    (2)一对一模型(一用户一核),与KSP相似,需要限制系统的线程数
    (3)多对多模型(多用户多核),它可以像一对一模型那样,使一个进程的多个线程并行地运行在多处理机系统上,也可以像多对一模型那样,减少线程管理开销和提高效率

发布了16 篇原创文章 · 获赞 1 · 访问量 369

猜你喜欢

转载自blog.csdn.net/qq_41174940/article/details/105504666
今日推荐