Python基础知识点回顾(4)

多任务-线程知识点回顾:

  • 并发:指的是任务数多余cpu核数,通过操作系统的各种任务调度算法,实现用多个任务“一起”执行(实际上总有一些任务不在执行,因为切换任务的速度相当快,看上去一起执行而已)
  • 并行:指的是任务数小于等于cpu核数,即任务真的是一起执行的

  线程用到的模块:threading

  多线程简单例子:

#coding=utf-8
import threading
import time

def saySorry():
    print("亲爱的,我错了,我能吃饭了吗?")
    time.sleep(1)

if __name__ == "__main__":
    for i in range(5):
        t = threading.Thread(target=saySorry)
        t.start() #启动线程,即让线程开始执行

  注意:当调用start()时,才会真正的创建线程,并且开始执行


多线程共享全局变量

          优点:方便在多个线程间共享数据

          缺点:线程是对全局变量随意遂改可能造成多线程之间对全局变量的混乱(即线程非安全)(资源竞争)

同步:

    同步就是协同步调,按预定的先后次序进行运行

    如进程、线程同步,可理解为进程或线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,于是停下来,示意B运行;B执行,再将结果给A;A再继续操作。

互斥锁:

    当多个线程几乎同时修改某一个共享数据的时候,需要进行同步控制,线程同步能够保证多个线程安全访问竞争资源,最简单的同步机制是引入互斥锁。

    

锁的好处:

    • 确保了某段关键代码只能由一个线程从头到尾完整地执行

锁的坏处:

    • 阻止了多线程并发执行,包含锁的某段代码实际上只能以单线程模式执行,效率就大大地下降了
    • 由于可以存在多个锁,不同的线程持有不同的锁,并试图获取对方持有的锁时,可能会造成死锁

死锁:

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

避免死锁:

    • 程序设计时要尽量避免(银行家算法)
    • 添加超时时间等

多任务-进程知识点回顾:

    进程的状态:就绪、执行、等待

    

    进程的创建-multiprocessing

    进程的通信-Queue

    进程池-Pool

多任务-协程知识回顾:

    协程是python个中另外一种实现多任务的方式

    协程-yield

    协程-greenlet

    协程-gevent

进程、线程、协程对比:

  1. 进程是资源分配的单位
  2. 线程是操作系统调度的单位
  3. 进程切换需要的资源很最大,效率很低
  4. 线程切换需要的资源一般,效率一般(当然了在不考虑GIL的情况下)
  5. 协程切换任务资源很小,效率高
  6. 多进程、多线程根据cpu核数不一样可能是并行的,但是协程是在一个线程中 所以是并发
posted @ 2019-03-05 15:26  eggnofaner  阅读(116)  评论(0编辑  收藏  举报