题目③ 说一下进程和线程的区别

计算机基础--操作系统

进程和线程的通俗理解

CPU

计算机CPU好比一个在运作的工厂【电力有限,一次只能供给一个车间使用】;

进程

进程好比工厂里的车间,它代表CPU能处理的单个任务;

  • 任一时刻,CPU总是运行一个进程,其它进程处于非运行状态

线程

线程好比车间里的工人,一个进程可以包含多个线程;

车间的空间是工人共享的

  • 一个进程的内存空间是共享的,每个线程都可以使用这些共享内存
互斥锁Mutex

有的房间最多只能容纳一个人,比如厕所

  • 一个线程使用某些内存空间时,其它线程必须等它结束才能使用这块内存

一个防止他人进入的简单方法就是门口加一把锁。先到的人锁上门,后到的人看到门锁了就在门口排队,等锁打开了再进去

  • 互斥锁:防止多个线程同时读写某一块内存区域
信号量Semaphore

有些房间可以同时容纳n个人,比如厨房

  • 好比某些内存区域,只能供给固定数目的线程使用

门口挂n把锁。进去的人取一把钥匙,出来时再把钥匙挂回原处。后到的人看到钥匙空了就在门口排队

  • 信号量:用来保证多个线程不会互相冲突

mutex是semaphore的一种特殊情况(n = 1),可否用后者替换前者?

  • mutex较为简单,且效率高,所以在必须保证资源独占的情况下,还是采用这种设计

操作系统设计的总结

  • 以多进程形式,允许多个任务同时运行

  • 以多进程形式,允许单个任务拆分成不同的部分运行

  • 提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源

概念

进程Process

  • 指系统中正在运行的一个应用程序;程序一旦运行就是进程;是系统进行资源分配的最小单位
进程 = 线程 + 内存 + 文件/网络句柄
  • 内存:逻辑内存,指的是内存的寻址空间。每个进程的内存是相互独立的

  • 文件/网络句柄是所有进程共有的。例如打开同一个文件,去抢同一个网络的端口的操作是被允许的

线程thread

  • 系统分配处理器时间资源的基本单位,或者说进程内独立执行的一个单元执行流;是程序执行的最小单位
线程 = 栈 + PC + TLS
  • :调用堆栈即调用栈(堆是没有含义的),从主线程的入口main函数,会不断地进行函数调用,每次调用时会把所有的参数和返回地址都压入栈中

  • PC(Program Counter)程序计数器:操作系统真正运行的是一个个线程,而进程只是它的一个容器PC就是指向当前的指令,指令存放在内存中;数据和程序是存储在同一片内存的,PC指针指向内存

  • TLS(thread local storage):用来存储线程所独有的数据。线程才是操作系统真正运行的

进程之间是怎样进行交互的?

  • 通过TCP/IP的端口来实现

线程之间又是怎样进行交互的?

  • 通过共享的内存,只要大家的指针是同一个就可以看到各自的内存

总结

  1. 进程需要分配一大部分的内存,而线程只需要分配一部分栈。

  2. 一个程序至少有一个进程,一个进程至少有一个线程。

  3. 进程是资源分配的最小单位,线程是程序执行的最小单位。

  4. 一个线程可以创建和销毁另一个线程,同一个进程中的多个线程之间可以并发执行。

原文地址:https://www.cnblogs.com/pleaseAnswer/p/15267410.html