Fork me on GitHub

进程和线程的区别

进程

狭义定义:进程是正在运行的程序的实例。

组成:进程是一个实体。每一个进程都有它自己的地址空间。一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。

结构:结构特征: 进程由程序、数据和进程控制块三部分组成。

调度算法:实时系统中: FIFO(First Input First Output, 先进先出算法), SJF(Shortest Job First, 最短作业优先算法),SRTF(Shortest Remaining Time First, 最短剩余时间优先算法)。
交互式系统中: RR(Round Robin, 时间片轮转法),HPF(Highest Priority First, 最高优先级算法),多级队列,最短进程优先,保证调度,彩票调度,公平分享调度。

线程的定义及基本概念

一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。

线程之间的关系:一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。

特点:

  • 轻型实体(线程的实体包括程序、数据和TCB。TCB用于指示被执行指令序列的程序计数器、保留局部变量、少数状态参数和返回地址等的一组寄存器和堆栈。)
  • 独立调度和分派的基本单位
  • 可并发执行
  • 共享进程资源(所有线程都具有相同的地址空间(进程的地址空间),这意味着,线程可以访问该地址空间的每一个虚地址;此外,还可以访问进程所拥有的已打开文件、定时器、信号量机构等。由于同一个进程内的线程共享内存和文件,所以线程之间互相通信不必调用内核。)

进程和线程的区别

1、线程是处理器调度的基本单位,但进程不是。
2、二者均可并发执行。
3、进程是资源的分配和调度的一个独立单元,而线程是CPU调度的基本单元
4、同一个进程中可以包括多个线程,并且线程共享整个进程的资源(寄存器、堆栈、上下文),一个进行至少包括一个线程。
5、进程的创建调用fork或者vfork,而线程的创建调用pthread_create,进程结束后它拥有的所有线程都将销毁,而线程的结束不会影响同个进程中的其他线程的结束
6、线程是轻两级的进程,它的创建和销毁所需要的时间比进程小很多,所有操作系统中的执行功能都是创建线程去完成的
7、线程中执行时一般都要进行同步和互斥,因为他们共享同一进程的所有资源
8、线程有自己的私有属性TCB,线程id,寄存器、硬件上下文,而进程也有自己的私有属性进程控制块PCB,这些私有属性是不被共享的,用来标示一个进程或一个线程的标志

线程同步

  • Mutex(互斥锁): 用来锁住公用的内存,同时只有一个线程访问。
  • 这时的解决方法,就是在门口挂n把钥匙。进去的人就取一把钥匙,出来时再把钥匙挂回原处。后到的人发现钥匙架空了,就知道必须在门口排队等着了。这种做法叫做”信号量”(Semaphore),用来保证多个线程不会互相冲突。
    不难看出,mutex是semaphore的一种特殊情况(n=1时)。也就是说,完全可以用后者替代前者。但是,因为mutex较为简单,且效率高,所以在必须保证资源独占的情况下,还是采用这种设计。

总结

进程是资源分配的基本单位,线程是调度的基本单位。进程包含线程,线程共用进程的资源。

Your support will encourage me to continue to create!