python是单线程还是多线程,python中多进程和多线程分别使用什么方法
几乎所有的操作系统都支持同时运行多个任务。任务通常是一个程序,每个运行的程序是一个进程。当一个程序运行时,它可能包含多个顺序执行流,每个顺序执行流都是一个线程。
线程和进程
几乎所有的操作系统都支持进程的概念,所有运行的任务通常都对应一个进程。当一个程序在内存中运行时,它就变成了一个进程。进程是具有某些独立功能的运行程序。它是系统分配和调度资源的独立单元。
一般来说,该过程包含以下三个特征:
独立性:进程是系统中独立的实体。它可以有自己独立的资源,每个进程都有自己的私有地址空间。没有进程本身的许可,一个用户进程不能直接访问其他进程的地址空间。
动态:进程和程序的区别在于,程序只是一组静态的指令,而进程是系统中一组活动的指令。过程中加入了时间的概念。一个进程有自己的生命周期和不同的状态,但是程序中没有这些概念。
并发性:多个进程可以在一个处理器上并发执行,多个进程不会互相影响。
并发和并行是两个概念。并行是指在多个处理器上同时执行多个指令。并发是针对同一时间只能执行一条指令,但多个进程指令快速轮换执行,造成多个进程同时执行的宏观效果。
大多数操作系统支持多个进程的并发执行,几乎所有现代操作系统都支持多个任务的同时执行。比如程序员一边开开发工具一边写程序,打开参考手册以备将来参考,同时用电脑播放音乐.此外,当每台计算机运行时,有许多底层支持程序在运行.这些过程似乎同时在起作用。
但事实是,对于一个CPU来说,它在某个时间点只能执行一个程序。也就是说只能运行一个进程,CPU在这些进程中不断轮换。那么,为什么用户感觉不到任何打扰呢?
这是因为,与人们的感知相比,CPU的执行速度太快了(如果启动了足够多的程序,用户仍然可以感觉到程序的运行速度有所下降)。因此,虽然CPU在多个进程之间轮换,但用户感觉好像有多个进程同时执行。
现代操作系统都支持多进程并发执行,但由于硬件和操作系统的差异,在具体实现细节上可能会采取不同的策略。常用的策略有:
共享多任务策略,如Windows 3.1和Mac OS 9操作系统;
抢占式多任务操作策略效率更高。目前大多数操作系统都采用这种策略,如Windows NT、Windows 2000、UNIX/Linux等。
多线程扩展了多进程的概念,使得同一个进程可以同时处理多个任务。线程也称为轻量级进程,是进程的执行单元。就像操作系统中进程的状态一样,线程是程序中独立的并发执行流。
当进程初始化时,主线程被创建。对于绝大多数应用程序,通常只需要一个主线程,但是也可以在一个进程中创建多个顺序执行流。这些顺序执行流是线程,每个线程都是独立的。
线程是进程的一部分。一个进程可以有多个线程,一个线程必须有一个父进程。一个线程可以拥有自己的堆栈、自己的程序计数器和自己的局部变量,但它不拥有系统资源。它与其他线程共享父进程拥有的所有资源。因为多线程共享父进程中的所有资源,编程更方便;但是您必须更加小心,因为您需要确保线程不会干扰同一个进程中的其他线程。
线程可以完成一定的任务,与其他线程共享父进程中的共享变量和部分环境,相互协作完成未完成进程的任务。
线程独立运行,不知道进程中是否有其他线程。线程的运行是抢占式的,也就是说,当前运行的线程可以随时被挂起,以便另一个线程可以运行。
一个线程可以创建和取消另一个线程,同一进程中的多个线程可以并发运行。
从逻辑上看,多线程存在于一个应用程序中,它允许一个应用程序同时被多个执行部分执行。而操作系统不需要把多线程看成多个独立的应用,实现多线程的调度和管理,资源分配。线程的调度和管理是由进程本身完成的。
简而言之,一个程序运行后至少有一个进程,一个进程可以包含多个线程,但至少有一个主线程。
综上,可以说操作系统可以同时执行多个任务,每个任务就是一个进程,一个进程可以同时执行多个任务,每个任务就是一个线程。
多线程的优势
它是线程程序中独立的并发执行流。与分离的进程相比,进程中的线程不那么孤立,它们共享内存、文件句柄和其他进程的应有状态。
由于线程的划分尺度小于进程的划分尺度,多线程程序的并发性高。在执行过程中,进程拥有独立的内存单元,而多个线程共享内存,大大提高了程序的运行效率。
线程比进程有更高的性能,因为同一个进程中的线程有一些共同点。多个线程共享同一个进程。
虚拟空间。线程共享的环境包括进程代码段、进程的公有数据等,利用这些共享的数据,线程之间很容易实现通信。
操作系统在创建进程时,必须为该进程分配独立的内存空间,并分配大量的相关资源,但创建线程则简单得多。因此,使用多线程来实现并发比使用多进程的性能要高得多。
总结起来,使用多线程编程具有如下几个优点:
进程之间不能共享内存,但线程之间共享内存非常容易。
操作系统在创建进程时,需要为该进程重新分配系统资源,但创建线程的代价则小得多。因此,使用多线程来实现多任务并发执行比使用多进程的效率高。
Python 语言内置了多线程功能支持,而不是单纯地作为底层操作系统的调度方式,从而简化了 Python 的多线程编程。
在实际应用中,多线程是非常有用的。比如一个浏览器必须能同时下载多张图片;一个 Web 服务器必须能同时响应多个用户请求;图形用户界面(GUI)应用也需要启动单独的线程,从主机环境中收集用户界面事件……总之,多线程在实际编程中的应用是非常广泛的。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。