基础

秋招面的本来就不多,听到的最多的就是:你基础不好。对着屏幕从题库里跳出一大堆概念问题,对面背的不够熟练或者漏了一条,然后就是你基础不好。:-(

进程和线程

  • 段程序的执行过程,是进程实体的运行过程(进程实体)=程序+数据+PCB(进程控制块)),大多数时候我们把进程实体叫做进程。(进程是具有独立功能的程序在数据集合上的运行过程)
  • 进程是分配系统资源的单位,各个进程拥有的内存地址空间相互独立。
  • 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
  • 进程在执行过程中拥有独立的内存单元,而多个线程共享进程的内存

区别:

  • 进程是资源分配的基本单位,线程是独立调度的基本单位。
  • 在同一进程中,线程的切换不会引起进程切换。
  • 由于创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O 设备等,所付出的开销远大于创建或撤销线程时的开销。而线程开销小。

基本概念:

线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。

程序是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,也就是说程序是静态的代码。

进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。简单来说,一个进程就是一个执行中的程序。换句话说,当程序在执行时,将会被操作系统载入内存中。 线程是进程划分成的更小的运行单位。线程和进程最大的不同在于基本上各进程是独立的,而各线程则不一定,因为同一进程中的线程极有可能会相互影响

  1. 进程与线程的联系

①一个线程只能属于一个进程,一个进程可以有多个线程;

②系统资源分配给进程,同一进程的所有线程共享该进程的所有资源;

③真正在处理机上运行的是线程;

④不同进程的线程间利用消息通信的方式实现同步。

  1. 进程与线程的区别

①调度:线程是系统调度和分配的基本单位,进程是作为拥有系统资源的基本单位;

②并发性:进程之间可以并发执行,同一进程的多个线程时间亦可以并发执行;

③拥有资源:进程是拥有资源的独立单位,线程不拥有资源,但可以访问隶属于进程的资源;

④系统开销:创建和撤销进程的开销更大;进程拥有独立的地址空间,一个进程的崩溃不会影响其他进程;线程拥有自己的堆栈和局部变量,没有独立的地址空间,因此进程里的一个线程崩溃会导致其他线程均崩溃。

进程通信方式

进程通信: 进程间的信息交换

  • 管道(pipe文件)及命名管道(named pipe(FIFO)):管道可用于具有亲缘关系的父子进程间的通信,命名管道除了具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;
    • 各个进程要互斥的访问管道;
    • 只能实现半双工通信
  • 信号(signal):信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生;
  • 消息队列:消息队列是消息的链接表,它克服了上两种通信方式中信号量有限的缺点,具有写权限的进程可以按照一定得规则向消息队列中添加新信息;对消息队列有读权限得进程则可以从消息队列中读取信息;
  • 共享内存(共享存储):可以说这是最有用的进程间通信方式。它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据得更新。这种方式需要依靠某种同步操作,如互斥锁和信号量等;
  • 信号量:它是一个计数器,用于为多个进程提供对共享数据对象的访问,主要作为进程之间及同一种进程的不同线程之间得同步和互斥手段;
    • 信号量用于进程间同步,若要在进程间传递数据需要结合共享内存
    • 信号量基于操作系统的 PV 操作,程序对信号量的操作都是原子操作。
    • 每次对信号量的 PV 操作不仅限于对信号量值加 1 或减 1,而且可以加减任意正整数。
  • 套接字:这是一种更为一般得进程间通信机制,它可用于网络中不同机器之间的进程间通信。