在Python中,进程和线程都是用于并发执行任务的概念,但它们在实现方式和作用上有所不同。
进程是指计算机中正在运行的程序的实例。每个进程都拥有自己独立的内存空间和系统资源,它们之间相互隔离,彼此独立运行。每个进程都有自己的地址空间、文件描述符、环境变量等。
multiprocessing
模块创建和管理多个进程。每个进程都有自己的 Python 解释器,因此可以充分利用多核处理器。进程是一个应用程序(1个进程是一个软件)
线程是在进程内部执行的独立单元,它是进程中的一个执行路径。一个进程可以包含多个线程,这些线程共享进程的内存空间和系统资源。线程之间可以并发执行,共享数据,使得程序可以同时执行多个任务。
threading
模块创建和管理线程。Python 中的全局解释器锁(Global Interpreter Lock,GIL)限制了多线程程序在多核处理器上的并行性,因此在 CPU 密集型任务中,多进程可能更适合。线程是一个进程中的执行场景/执行单元。一个进程可以启动多个线程
对于java程序来说,当在DOS命令窗口中输入:
Python HelloWorld.py 回车之后
会先启动PVM,而PVM就是一个进程。
PVM再启动一个主线程
同时再启动一个垃圾回收线程负责看护,回收垃圾
最起码,现在的Python程序中至少有两个线程并发。一个是垃圾回收线程,一个是主线程
阿里巴巴:进程
京东:进程
进程可以看做是现实生活中的公司;线程可以看作是公司当中的某个员工
注意:
进程A和进程B的内存独立不共享(阿里巴巴和京东资源不会共享)
线程A和线程B:
- 假设启动10个线程,会有10个栈内存空间,每个栈和每个栈之间互不干扰,各自执行各自的,这就是多线程并发
Python 中之所以有多线程机制,目的就是为了提高程序的处理效率
在Python中,多线程编程可以提高程序的并发性能和资源利用率,但也需要注意线程安全和同步的问题,避免出现竞态条件和数据一致性问题。
需要注意的是,Python 的多线程在某些情况下由于 GIL 的存在,可能不会充分发挥多核处理器的性能优势,因此在一些情况下,多进程可以是更好的选择。但对于 I/O 密集型任务,多线程通常是一个有效的选择,因为线程可以在等待 I/O 操作完成时让出 CPU 资源。
总之,Python 提供了多进程和多线程的支持,允许你以不同的方式实现并发编程,以满足不同类型任务的需求。选择使用进程还是线程取决于你的具体应用场景和性能需求。
threading.Thread
类你可以创建一个自定义的线程类,继承自 threading.Thread
类,并重写 run
方法来定义线程的执行逻辑。
import threading
class MyThread(threading.Thread):
def run(self):
for i in range(1000):
print("分支线程-->",i)
# 创建线程对象
my_thread = MyThread()
# 启动线程
my_thread.start()
for i in range(1000):
print("主线程-->", i)
threading
模块Python 内置了 threading
模块,它提供了创建和管理线程的类和方法。这是 Python 中最常用的多线程编程方式。
import threading
# 定义一个线程函数
def my_function():
for i in range(1000):
print("分支线程-->",i)
# 创建线程对象
my_thread = threading.Thread(target=my_function)
# 启动线程
my_thread.start()
for i in range(1000):
print("主线程-->", i)