Python:多任务,并发,并行的理解及线程、进程的对比

编程之家收集整理的这篇文章主要介绍了Python:多任务,并发,并行的理解及线程、进程的对比编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

什么叫“多任务”呢?简单地说,就是操作系统可以同时运行多个任务。

再打个比方,你一边在用浏览器上网,一边在听MP3,一边在用Word赶作业,这就是多任务,至少同时有3个任务正在运行。

并行执行多任务只能在多核cpu上实现,但是,由于任务数量远远多于cpu的核心数量,所以,操作系统也会自动把很多任务轮流调度到每个核心上执行。

@H_403_6@
  • 并发:交替处理多个任务的能力。指的是任务数多于cpu核数,通过操作系统的各种任务调度算法,实现用多个任务“一起”执行(实际上总有一些任务不在执行,因为切换任务的速度相当快,看上去一起执行而已)
  • 并行:同时处理多个任务的能力,指的是任务数小于等于cpu核数,任务真的是一起执行的。
  • 多线程共享全局变量

    @H_403_6@
  • 如果多个线程同时对同一个全局变量操作,会出现资源竞争问题,从而数据结果会不正确。
  • 线程同步能够保证多个线程安全访问竞争资源,最简单的同步机制是引入互斥锁。
  • 某个线程要更改共享数据时,先将其锁定,此时资源的状态为“锁定”,其他线程不能更改;直到该线程释放资源,将资源的状态变成“非锁定”,其他的线程才能再次锁定该资源。互斥锁保证了每次只有一个线程进行写入操作,从而保证了多线程情况下数据的正确性。
  • 一个线程调用锁的acquire()方法获得锁时,锁就进入“locked”状态。

    每次只有一个线程可以获得锁。如果此时另一个线程试图获得这个锁,该线程就会变为“locked”状态,称为“阻塞”,直到拥有锁的线程调用锁的release()方法释放锁之后,锁进入“unlocked”状态。

    线程调度程序从处于同步阻塞状态的线程中选择一个来获得锁,并使得该线程进入运行(running)状态。

    在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源,就会造成死锁。 

     

    2. 避免死锁

    @H_403_6@
  • 程序设计时要尽量避免(银行家算法)
  • 添加超时时间等
  • 进程线程的对比:

    定义的不同

    @H_403_6@
  • 进程是系统进行资源分配和调度的一个独立单位.

  • 线程是进程的一个实体,是cpu调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.

  • 区别

    @H_403_6@
  • 一个程序至少有一个进程,一个进程至少有一个线程.
  • 线程的划分尺度小于进程(资源比进程少),使得多线程程序的并发性高。
  • 进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率
  • 线线程不能够独立执行,必须依存在进程中
  • 可以将进程理解为工厂中的一条流水线,而其中的线程就是这个流水线上的工人
  • 优缺点

    线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。

    GIL(全局解释器锁) 

    通过代码可以发现 多进程可以充分使用cpu的两个内核 而多线程却不能充分使用cpu的两个内核

    问题 : 通过验证我们发现多线程并不能真正的让多核cpu实现并行

    原因 : cpython解释器中存在一个GIL(全局解释器锁),他的作用就是保证同一时刻只有一个线程可以执行代码,因此造成了我们使用多线程的时候无法实现并行

    解决方案法 :

    1:更换解释器 比如使用jpython(java实现的python解释器)

    2:使用多进程完成多任务的处理

     

    结论:

    1. 在 处理像科学计算 这类需要持续使用cpu的任务的时候 单线程会比多线程快

    2. 在 处理像IO操作等可能引起阻塞的这类任务的时候 多线程会比单线程快

    总结

    以上是编程之家为你收集整理的Python:多任务,并发,并行的理解及线程、进程的对比全部内容,希望文章能够帮你解决Python:多任务,并发,并行的理解及线程、进程的对比所遇到的程序开发问题。

    如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

    本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
    如您喜欢寻找一群志同道合、互帮互助的学习伙伴,可以点击下方链接加入:
    编程之家官方1群
    编程之家官方2群
    编程之家官方3群
    编程之家官方4群

    相关文章

    猜你在找的Linux相关文章

    Windows/Linux 开启端口监听
    Linux下目录和文件的权限
    Linux各目录及每个目录的详细介绍
    Linux各目录及每个目录的详细介绍
    初步了解Linux系统的目录(一级目录)
    Linux目录结构
    vs2019开发wsl2下的linux程序
    linux主机建立ssh信任关系
    微信公众号搜索 “ 程序精选 ” ,选择关注!
    微信公众号搜 "程序精选"关注