zoukankan      html  css  js  c++  java
  • 线程的理解

      说到线程就不得说进程。

    • 进程

      进程对应一个程序,每个进程对应一定的内存地址空间,并且只能使用它自己的内存空间,各个进程间互不干扰。并且进程保存了程序每个时刻的运行状态,这样就为进程切换提供了可能。当进程暂时时,它会保存当前进程的状态(比如进程标识、进程的使用的资源等),在下一次重新切换回来时,便根据之前保存的状态进行恢复,然后继续执行。这就是并发,能够让操作系统从宏观上看起来同一个时间段有多个任务在执行。换句话说,进程让操作系统的并发成为了可能。

      注意,虽然并发从宏观上看有多个任务在执行,但是事实上,任一个具体的时刻,只有一个任务在占用CPU资源(当然是对于单核CPU来说的)。

    • 线程

      线程,让一个线程去执行进程一个子任务,这样一个进程就包括了多个线程,每个线程负责一个独立的子任务,让用户感觉是同时在做多件事情的,满足了用户对实时性的要求。换句话说,进程让操作系统的并发性成为可能,而线程让进程的内部并发成为可能。

      注意,一个进程虽然包括多个线程,但是这些线程是共同享有进程占有的资源和地址空间的。进程是操作系统进行资源分配的基本单位,而线程是操作系统进行调度的基本单位。

      由于多个线程是共同占有所属进程的资源和地址空间的,那么就会存在多个线程要同时访问某个资源的同步问题,这就是线程同步问题。

    • 线程与进程的区别归纳:

      a.地址空间和其它资源:进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。

      b.通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。

      c.调度和切换:线程上下文切换比进程上下文切换要快得多。

      d.在多线程OS中,进程不是一个可执行的实体。

  • 相关阅读:
    简明Python3教程 12.问题解决
    简明Python3教程 11.数据结构
    【SPOJ 694】Distinct Substrings
    【codeforces Manthan, Codefest 17 C】Helga Hufflepuff's Cup
    【CF Manthan, Codefest 17 B】Marvolo Gaunt's Ring
    【CF Manthan, Codefest 17 A】Tom Riddle's Diary
    【SPOJ 220】 PHRASES
    【POJ 3261】Milk Patterns
    【POJ 3294】Life Forms
    【POJ 1226】Substrings
  • 原文地址:https://www.cnblogs.com/lcngu/p/5140537.html
Copyright © 2011-2022 走看看