知行编程网知行编程网  2022-11-19 17:00 知行编程网 隐藏边栏  5 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于什么是线程(多线程),Python多线程的好处的相关知识,希望可以帮到处于编程学习途中的小伙伴

什么是线程(多线程),Python多线程的好处

几乎所有的操作系​​统都支持同时运行多个任务。一个任务通常是一个程序,每个运行的程序都是一个进程。一个程序在运行时,可能包含多个顺序执行流,每个顺序执行流就是一个线程。


线程和进程

几乎所有的操作系​​统都支持进程的概念,所有运行的任务通常都对应一个进程(Process)。当一个程序进入内存运行时,就变成了一个进程。进程是一个正在运行并具有一定独立功能的程序。进程是系统进行资源分配和调度的独立单位。

一般而言,进程包含如下三个特征:

独立性:进程是系统中的独立实体。它可以拥有自己独立的资源,每个进程都有自己私有的地址空间。一个用户进程在没有进程自身许可的情况下不能直接访问另一个进程的地址空间。

动态:进程和程序的区别在于,程序只是一组静态的指令,而进程是一组在系统中处于活动状态的指令。过程中加入了时间的概念。进程有自己的生命周期和各种状态,程序中没有这个概念。

并发性:多个进程可以在单个处理器上并发执行,多个进程之间不会相互影响。

并发和并行是两个概念。并行是指同时在多个处理器上同时执行多条指令;并发的目的是同时只执行一条指令,但是多个进程指令是快速轮换执行的,这样在宏观层面上就有了同时执行多个进程的效果。

大多数操作系统都支持并发执行多个进程,几乎所有的现代操作系统都支持同时执行多个任务。比如程序员一边写程序一边驱动开发工具,一边打开参考手册参考,一边用电脑播放音乐……另外,每台电脑还有大量的底层配套程序在运行……这些进程似乎同时工作。

但事实是,CPU 一次只能执行一个程序。即只能运行一个进程,CPU不断在这些进程之间轮流执行。那么为什么用户感觉不到任何干扰呢?

这是因为CPU的执行速度对于人的感知来说太快了(如果启动了足够多的程序,用户仍然可以感觉到程序的运行速度下降了)。因此,尽管 CPU 在多个进程之间轮流执行,但用户感觉好像多个进程在同时执行。

现代操作系统都支持多进程并发执行,但在具体实现细节上,可能会因硬件和操作系统的不同而采用不同的策略。比较常见的策略是:

共享多任务处理策略,例如 Windows 3.1 和 Mac OS 9 操作系统采用的策略;

抢占式多任务运行策略效率更高,目前大多数操作系统都采用这种策略,如Windows NT、Windows 2000和UNIX/Linux等操作系统。

多线程扩展了多处理的概念,使同一个进程可以同时处理多个任务。线程(Thread)也称为轻量级进程(Lightweight Process),线程是进程的执行单元。就像进程之于操作系统一样,线程是程序中独立的并发执行流。

当进程初始化时,主线程被创建。对于绝大多数应用程序,通常只需要一个主线程,但也可以在进程中创建多个顺序执行流。这些顺序执行的流程就是线程,每个线程都是独立的。

线程是进程的组成部分,一个进程可以有多个线程,一个线程必须有一个父进程。线程可以拥有自己的堆栈、程序计数器和局部变量,但不拥有系统资源。它与父进程的其他线程共享进程拥有的所有资源。编程更容易,因为多个线程共享父进程中的所有资源;但必须注意确保线程不会干扰同一进程中的其他线程。

线程可以完成一定的任务,并且可以与其他线程共享父进程中的共享变量和部分环境,相互协作完成未完成进程要完成的任务。

一个线程独立运行,它不知道进程中是否还有其他线程。线程抢占式运行,即当前运行的线程随时可能被挂起,让另一个线程运行。

一个线程可以创建和取消另一个线程,同一个进程中的多个线程可以并发运行。

从逻辑上讲,多线程存在于一个应用程序中,这样一个应用程序可以有多个执行部分同时执行,但操作系统不需要把多个线程当作多个独立的应用程序,而实现多线程调度和管理,以及资源分配。线程的调度和管理是由进程自己完成的。

总之,一个程序运行后,至少有一个进程。一个进程可以包含多个线程,但至少必须包含一个主线程。

总结一下,可以说操作系统可以同时执行多个任务,每个任务就是一个进程,一个进程又可以同时执行多个任务,每个任务就是一个线程。

多线程的好处

线程是程序中独立的并发执行流。一个进程中的线程没有单独的进程那么孤立,它们共享内存、文件句柄和进程应该拥有的其他状态

因为线程的划分规模比进程小,所以多线程程序的并发度高。一个进程在执行过程中有独立的内存单元,多个线程共享内存,大大提高了程序的运行效率。

线程比进程具有更高的性能,因为同一个进程中的线程具有共性,多个线程共享同一个进程的虚拟空间。线程共享的环境包括进程代码段、进程的公共数据等,利用这些共享数据,很容易实现线程间的通信。

操作系统在创建进程时,必须为进程分配独立的内存空间,并分配大量相关资源,但创建线程就简单多了。因此,使用多线程实现并发的性能要比使用多进程高很多。

总结起来,使用多线程编程具有如下几个优点:

你不能在进程之间共享内存,但在线程之间共享内存非常容易。

操作系统在创建进程时,需要为进程重新分配系统资源,但创建线程的代价要小得多。因此,使用多线程实现多任务并发执行比使用多进程效率更高。

Python语言内置了对多线程功能的支持,而不是简单地作为底层操作系统的一种调度方式,从而简化了Python的多线程编程。

在实际应用中,多线程非常有用。例如,浏览器必须能够同时下载多张图片; Web 服务器必须能够同时响应多个用户请求;一个图形用户界面(GUI)应用程序还需要启动一个单独的线程来从宿主环境中收集用户界面事件……总之,多线程在实际编程中的应用非常广泛。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享