zoukankan      html  css  js  c++  java
  • 题目③ 说一下进程和线程的区别

    计算机基础--操作系统

    进程和线程的通俗理解

    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. 一个线程可以创建和销毁另一个线程,同一个进程中的多个线程之间可以并发执行。

  • 相关阅读:
    指针与数组实例练习(指针运算)
    C语言数组和函数实例练习(二)
    C语言数组和函数实例练习(一)
    近一个月的学习总结(4.8—5.12)
    Java网页小程序——Java Applet
    数据结构(二)线性表——链表
    JDBC的使用(MySQL数据库)
    Python变量类型及变量
    Shell编程语法
    文本处理三剑客
  • 原文地址:https://www.cnblogs.com/pleaseAnswer/p/15267410.html
Copyright © 2011-2022 走看看