多线程

作者: 杜大个 | 来源:发表于2018-10-23 18:33 被阅读0次

    1、并发---------------------------------------------------------------------------------------------------------------------------
    <h3>同时发起多个任务,但是我们的任务是一个一个交替执行的

    并行---------------------------------------------------------------------------------------------------------------------------
    任务数量小于或等于核心的数量,同时执行
    ///////////////////////////////////////////////////////
    补充:对比线程和进程
    (1)、定义
    进程:是操作系统分配资源的调度的基本单元
    线程/:是依赖于进程执行,线程是cpu执行调度的最小单元
    (2)、区别:
    进程是会分配资源空间,每一个进程之间的资源不共享
    线程则不会占用资源空间,线程之间的资源是共享想得,为了防止资源的错乱。我们一般加线程锁
    (3)、使用的场景
    进程一般情况下处理机算密集型任务
    线程一般情况下处理IO密集型任务
    //////////////////////////////////////////////////////////

    2、*********************线程的执行顺序
    import threading
    import time
    def do():
    print('我要唱歌*****'+threading.current_thread().name)
    time.sleep(1)
    def tiao():
    print('我哟=体哦啊'+threading.current_thread().name)
    time.sleep(1)
    if name == '
    main**':
    threads = []
    for i in range(50):

        #创建线程
        td1 = threading.Thread(target=do)
        threads.append(td1)
        td2 = threading.Thread(target=tiao)
        threads.append(td2)
    for thread in threads:]
        #开启线程
        thread.start()
        # td1.join()
    
    

    3、/多线程
    python的thread模块是比较底层的模块,python的threading模块是对thread做了一些包装的,可以更加方便的被使用
    多线程程序的执行顺序是不确定的。当执行到sleep语句时,线程将被阻塞,到sleep结束后,线程进入就绪状态,等待调度。而线程调度将自行选择一个线程执行。上面的代码中只能保证每个线程都运行完整个run函数,但是线程的启动顺序、run函数中每次循环的执行顺序都不能确定。

    注意:
    多线程的优点是:在一个进程内的所有线程共享全局变量,很方便在多个线程间共享数据
    多线程的缺点:缺点就是,线程是对全局变量随意遂改可能造成多线程之间对全局变量的混乱(即线程非安全)

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

    注意:
    如果这个锁之前是没有上锁的,那么acquire不会堵塞
    如果在调用acquire对这个锁上锁之前 它已经被 其他线程上了锁,那么此时acquire会堵塞,直到这个锁被解锁为止

    5、锁的好处:确保了某段关键代码只能由一个线程从头到尾完整地执行

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

    相关文章

      网友评论

          本文标题:多线程

          本文链接:https://www.haomeiwen.com/subject/mpnazftx.html