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

      说到线程就不得说进程。

    • 进程

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

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

    • 线程

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

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

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

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

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

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

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

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

  • 相关阅读:
    运行pyzbar时报 Could not find module ‘libzbar-64.dll ‘or one of its dependenci的错误
    [Tips] pandas 如何根据index进行slice
    [Tips] pandas逐行遍历
    [Tips] Docker build
    [Tips] redis的key自动过期策略
    [Tips] No module named ipykernel错误
    [Tips] mac下anconda python环境中site-package的位置
    [Tips] pandas获取每月最后一天
    [Tips] docker的daemon.json设置私有镜像仓库
    [Tips] nginx端口转发
  • 原文地址:https://www.cnblogs.com/lcngu/p/5140537.html
Copyright © 2011-2022 走看看