• 进程和线程和协程补充


    进程和线程区别?

    地址空间:
    线程共享本进程的地址空间,而进程之间是独立的地址空间。

    资源:
    线程共享本进程的资源如内存、I/O、cpu等,不利于资源的管理和保护,而进程之间的资源是独立的,能很好的进行资源管理和保护。

    健壮性:
    多进程要比多线程健壮,一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。

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

    可并发性:
    两者均可并发执行。

    切换时:
    进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程

    其他:
    线程是处理器调度的基本单位,但是进程不是。


    进程分配了什么资源?

    包括用于存放程序正文、数据的磁盘和内存地址空间,以及在运行时所需要的I/O设备,已打开的文件,信号量等

    为什么一个线程挂掉可能导致其他的线程都挂掉?

    线程没有独立的地址空间,如果崩溃,会发信号,如果没有错误处理的handler,OS一般直接杀死进程。就算是有handler了处理,一般也会导致程序崩溃,因为很有可能其他线程或者进程的数据被破坏了。


    为什么要搞出和用协程呢?

    总结起来看:

    一是节省CPU

    避免系统内核级的线程频繁切换,造成的CPU资源浪费。好钢用在刀刃上。而协程是用户态的线程,用户可以自行控制协程的创建于销毁,极大程度避免了系统级线程上下文切换造成的资源浪费。

    二是节约内存

    在64位的Linux中,一个线程需要分配8MB栈内存和64MB堆内存,系统内存的制约导致我们无法开启更多线程实现高并发。而在协程编程模式下,可以轻松有十几万协程,这是线程无法比拟的。

    三是稳定性

    前面提到线程之间通过内存来共享数据,这也导致了一个问题,任何一个线程出错时,进程中的所有线程都会跟着一起崩溃。

    四是开发效率

    使用协程在开发程序之中,可以很方便的将一些耗时的IO操作异步化,例如写文件、耗时IO请求等。

  • 相关阅读:
    2021年上半年软件设计师下午真题及答案解析(一)
    LeetCode:2603. 收集树中金币 详解(2023.9.21 C++)
    CI/CD:安装配置Gitlab Runner
    保边滤波之基于测地距离的滤波与局部拉普拉斯滤波
    mybatis_plus批量处理(开启rewriteBatchedStatements)
    阿里妈妈API接口;item_search - 按关键字或网址搜索商品
    【访问控制】—>《熟练使用ACL进行上网行为管理》
    Redis 主从复制
    来看看 Discourse 3.2.0.beta2 版本添加的新功能
    20231027 基于STM32mp157a 的内核与应用层通过子系统控制led灯,以及计时器功能
  • 原文地址:https://blog.csdn.net/qq_52563729/article/details/125882602