美文网首页
多任务-线程

多任务-线程

作者: 咏远瑞智 | 来源:发表于2018-06-05 21:25 被阅读0次

1. 线程是cpu调度和分配的基本单元。多线程之间是通过互相争抢时间片来竞争资源的,他的机制是异步的。多线程使用方法:导入模块

                              import threading

                                   创建对象

                                   t= threading.Thread(target=函数引用,args=(参数1,参数2))

                              开启线程

                t.start()

当多个线程之间共享同一个数据时,容易造成数据的丢失,这时候就需要引入同步的概念,即互斥锁。互斥锁也就是给数据上锁,只有当一个线程执行完成并释放锁之后,下一个线程再次锁定该数据资源,以此类推,保证数据的完整性。

举个好理解的例子,多人上卫生间必须要排队,先进去的人上卫生间会上锁,直到完事开门之后,后面的人才能进去。

使用方法:导入模块threading中的类Lock。

import  threading

                    lock = threading.Lock()

                    上锁lock.acquire()  此时程序进入阻塞状态

                    释放lock.release()  此时程序进入运行状态

好处:使用互斥锁能保证一个线程完整执行,并且保证了数据的完整性

坏处:多个线程使用多个锁的情况下,容易造成死锁,因此在实际工作中应该少用锁。如果一定要使用,那么锁的范围应该越小越好。

其实使用多线程并不会提高效率,因为python存在一个全局解释器锁的历史遗留问题,也就是著名的GIL      。python的开发者吉多,在1991年计算机还是单核的时候,写出了GIL,用于解决在单核情况下多个线程充分利用cpu资源,就是cpython解释器会自动给一个线程上锁,等到这个线程执行结束,会将GIL锁转移到另一个线程中,这样能保证一个线程占满整个cpu,提高利用效率。(只有当执行耗时操作时,GIL锁也会自动转移到另一个线程中。)但是没过几年,因特尔公司发明了多核cpu处理器,这样GIL由原来的优势反而变成了缺点。其间也有社区专家优化过此问题,但是最终还是无法完全解决此问题。

所以,要想避免此问题,最好使用进程加协程的方式。或者使用jpython解释器。

相关文章

  • Python 高级5

    多任务-线程、多线程执行、线程注意点、自定义线程、多线程-共享全局变量、互斥锁、死锁 1. 多任务-线程 <1>多...

  • Python多线程多进程

    Python多线程多进程 QUICK START 1.[endif]进程和线程 1.1系统多任务机制 多任务操作的...

  • 重拾Java(4)-线程

    一、概述 Java对多线程编程提供了内置支持,多线程是特殊形式的多任务处理,所有现代系统都支持多任务处理。多任务处...

  • 简单了解进程、线程、协程

    当单任务不能满足工作的需要,只是需要使用多任务,多任务分为多进程,多线程,多协程 先有进程,进程创建线程,线程依附...

  • python多任务之协程

    协程,又称微线程,纤程,也称为用户级线程,在不开辟线程的基础上完成多任务,也就是在单线程的情况下完成多任务,多个任...

  • 多任务-线程

    1. 线程是cpu调度和分配的基本单元。多线程之间是通过互相争抢时间片来竞争资源的,他的机制是异步的。多线程使用方...

  • 多任务-线程

    1.多任务 在计算机中,操作系统可以同时运行多个任务,这就是多任务。那么如何解决多个任务同时运行呢,那就需要用到多...

  • 多任务-线程

    必要时可封装 多线程之间全局变量共享,并传参数

  • 多任务线程

    dispatch_group_t group = dispatch_group_create(); dispatc...

  • Python多任务(高级编程六)

    并行:真的多任务 cpu大于当前执行的任务并发:假的多任务 cpu小于当前执行的任务 多线程 查看线程数量 thr...

网友评论

      本文标题:多任务-线程

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