01什么是线程?
线程是操作系统能够进行运算调度的最小单位,它隶属于进程之中,也有人叫它轻量级进程。线程自己没有系统资源,它可与同属一个进程的其它线程共享进程中的资源,同一进程中的多个线程可以并发运行。
python 语言中内置了 threading 库对多线程功能的支持,从而简化 Python 语言的多线程编程。
02线程实现
普通创建线程的方法
在程序中引入 thrading 库,实现创建一个简单的线程
初始化一个线程
threading.Thread(target=run, args=("t1",))
调用 start 方法启动线程
当线程启动之后,会调用 run 方法,执行打印传入线程的参数信息
这是运行结果
thread.is_alive() 查看线程是否正在运行
thread.join() 连接到某个线程上,join 会等待该线程结束,解释器会一直保持运行,直到所有的线程都终结为止。
守护线程
当需要长时间或一直不断在后台运行任务时,这就需要考虑守护线程,将线程设置为 daemon。
t1 = threading.Thread(target=run, args=("t1",), daemon=True)
在初始化线程时设置 daemon 为 True ,开启守护线程。daemon 线程是无法被 join 的,当主线程结束后就会自动销毁掉。
03为什么使用多线程
线程在程序中是相对独立的执行流,与分隔的进程相比,线程具有轻量级、灵活、支持并发、线程与线程之间可以通信等优点。线程与线程之间隔离度小,共享句柄、内存和其它进程应有的状态。
因为线程相对于进程有以上诸多优点,在应用程序开发中使用多线程技术就会极大地提高应用程序的效率。多个线程共享内存,节约了系统资源,使一个进程下可以并发地运行多个线程,完成搞了高效的系统计算能力。
线程与线程之间更利于通信,一个应用程序的功能并不是也一般不会存在孤立的存在,不同功能模块之间需要进行数据交互,也可能需要同时运行,这就得依靠多线程与线程与线程之间的通信来完成。
操作系统创建进程时,需要单独的为进程分配独立的内存空间,而线程就相对简单很多。在操作系统中,内存资源是有限的,如何将有限的资源最大化利用,这就得让我我们考虑如何合理、灵活地运用多线程技术来实现。
总结
1、进程之间不能共享系统资源,进程与进程之间的通信业比较麻烦,相比线程就灵活很多;
2、操作系统在创建进程时,需要重新为进程分配资源,而操作系统中的资源有限,创建线程相对于创建进程就要好很多;
3、多个线程共享资源,可并发运行,相对于进程来说,运行效率就会高了不少。
感谢你的阅读,欢迎关注作者,作者会不定期更新 Python 硬核知识。