zoukankan      html  css  js  c++  java
  • 线程 & 进程 & 协程

    背景概念

    线程

    线程是操作系统中进行运算调度的最小单位。

    线程被包含在进程之中,是进程中的实际运作单位。

    一条线程指的是进程中一个单一顺序的控制流,一个进程可以并发多个线程,每条线程并行执行不同的任务。

    一个线程是一个execution context(执行上下文),即一个CPU执行时所需要的一串指令。

    每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序(进程)中,由应用程序提供多个线程执行控制。

    每个线程都有他自己的一组CPU寄存器,称为线程的上下文,该上下文反映了线程上次运行该线程的CPU寄存器的状态。

    指令指针和堆栈指针寄存器是线程上下文中两个最重要的寄存器,线程总是在进程得到上下文中运行的,这些地址都用于标志拥有线程的进程地址空间中的内存。

    执行上下文理解

           假设你正在读一本书,没有读完,你想休息一下,但是你想在回来时恢复到当时读的具体进度。有一个方法就是记下页数、行数与字数这三个数值,这些数值就是execution context。

    进程

    一个程序的执行实例就是一个进程。

    每一个进程提供之星程序所需的所有资源。(进程本质上是资源的集合)

    一个进程有一个虚拟的地址空间、可执行的代码、操作系统的接口、安全的上下文(启动该进程的用户和权限等等)、唯一的进程ID、环境变量、优先级类、最小和最大的工作空间(内存空间),还要有至少一个线程

    每个进程启动时都会最先产生一个线程,即主线程。

    进程与线程的区别

    同一个进程中的线程共享同一内存空间,但是进程之间是独立的

    对主线程的修改可能会影响其他线程的行为,但是父进程的修改(除了删除)不会影响其他子进程

    线程是一个上下文的执行指令,而进程是与运算相关的一簇资源

    同一个进程之间的进程之间可以直接通信,但是进城之间的交流需要借助中间代理来实现

    创建新的线程很容易(启动速度快),但是创建新的进程需要对父进程做一次复制

    一个线程可以操作同一个进程的其他线程,但是进程只能操作其子进程

    并发与并行的区别

    并发通常是指有多个任务需要同时进行,并行则是同一个时刻有多个任务执行。

    下面这个例子非常形象:

    并发情况下是一个老师在同一时间段辅助不同的人功课。并行则是好几个老师分别同时辅助多个学生功课。

    python的多线程

    https://www.cnblogs.com/yc913344706/p/9211000.html

    python的多进程

    https://www.cnblogs.com/yc913344706/p/9225812.html

    python的协程

    https://www.cnblogs.com/yc913344706/p/9226348.html

    参考资料

    搞定python多线程和多进程

    http://www.cnblogs.com/whatisfantasy/p/6440585.html

  • 相关阅读:
    MongoDB 时间截取、字符串截取、拼接(时间戳、字符串等)
    ClickHouse 参数配置
    C++函数调用栈的变化分析
    WPF中为button添加快捷键(ShortCut)的方法
    vscode中一些好用的插件介绍
    剑指Offer 2. 青蛙跳台阶问题
    切片Slice的使用
    剑指Offer 1. 斐波那契数列
    match_parent和wrap_content的区别
    字节流、字符流
  • 原文地址:https://www.cnblogs.com/yc913344706/p/9210987.html
Copyright © 2011-2022 走看看