• 有关进程和线程的小概念


     1、线程与进程的区别是什么?(怎么理解怎么写)

    进程是程序运行的状态和过程。
    进程会占用内存中的一块空间,消耗资源。
    每个进程最少会有一个线程(主线程),可以有多个线程。
    pyyhon在运行的过程中最多只能有一个线程调用CPU资源,那是因为在每个进程前面有GIL全局解释器锁。
    多个线程通过全局解释器锁是靠操作系统分配的,同一时刻只能有一个线程获得CPU资源 ,如果该线程
    遇到IO操作,操作系统会将CPU分配给别的线程做运算,直到该线程IO操作结束继续计算。
    如果多线程计算过程调用了全局变量就需要注意线程安全的问题,该问题只有多线程运算会遇到,
    线程安全的问题会直接影响程序运行结果。
    线程安全可以用互斥锁、迭代锁来解决。互斥锁相当于用户设置一个锁控制线程调用CPU资源,在一个线程调用CPU的过程中
    即便遇到IO操作由于锁的原因也不会将资源分配给其他线程使用,起到了串行计算的作用,由于互斥锁设置方便,可以自主
    设置锁住的位置和解锁的位置所以比单纯的单线程用JOIN的方式效率更高。
    由于互斥锁功能相对简单,不恰当的使用会导致死锁现象,所以有了迭代锁的概念,用treading.RLock()控制,
    起到线程串行的作用,不会导致线程安全问题。

    2、在 Python 中,哪一种多线程的程序表现得更好,I/O 密集型的还是计算 密集型的?

    在python中多线程更适用于IO密集型操作,并不适用于计算密集型。
    由于python的机制是当一个线程遇到IO操作的时候会将CPU资源给下一个线程使用,直到IO操作结束才会继续调用CPU资源。
    这样的机制导致PYTHON更适用于IO密集型,而计算密集型在多个线程的时候会处于并发的状态,当一个线程计算一半的时候将
    CPU资源分配给其他的线程计算,上一个计算的结果还需要保存起来,占用资源,另外多个线程计算在切换的过程中是消耗资源的,
    并且计算的效率并没有提升反而有下降,故并不建议用python多线程运行计算密集型的代码。

  • 相关阅读:
    djinn:1 Vulnhub Walkthrough
    面试题:HTTP协议工作原理
    面试题:URI和URL的区别
    面试题:http和https的区别?什么是http无状态协议?什么是本地存储?
    Vue+Element 踩坑记录
    面试题:Vue的生命周期
    面试题:组件封装
    面试题:vuex
    面试题:callback
    面试题---华为机试在线训练:字符串最后一个单词的长度
  • 原文地址:https://www.cnblogs.com/ArmoredTitan/p/7203335.html
Copyright © 2020-2023  润新知