python中如何区分进程和线程?

How do you differentiate between the process and thread in python?

据我了解,线程和进程的区别在于线程共享资源。

我不确定这是否因一种语言而异,但您如何区分 一般或 Python?

中的线程和进程

每个独立的函数都是不同的进程吗? class 方法会因为共享内存而成为线程吗?递归函数会是线程吗?

如果没有使用threading或者processing模块,怎么区分呢?和 有必要区分吗?

谢谢

我会直接回答你的问题:

From what I understand, thread and process differs in that thread shares resources.

这不是真的,至少从你的理解来看不是这样。考虑到您可以同时在 NotepadWordPad 中编辑一个文件;两者都是共享相同资源的不同进程;在这种情况下是一个文件。

从概念上讲,进程是一个共享操作系统和其他进程资源的“应用程序”,而线程是共享 process.

相同基本资源的单个“执行上下文”

它比这要复杂一点,但在较高的层次上,这是进程和线程之间的基本区别。

I am not sure if this differs from one language to another, but how do you differentiate between thread and process in general or in Python?

鉴于前面的观点,在一般的基本上下文中,一个线程由一个进程拥有,每个进程至少有一个 线程。

code 的角度来看,您可以通过获取进程 ID 和线程 ID 来区分, 取决于您的语言。

对于 Python,您将 import os 然后调用 os.getpid() to get the current process ID, and if you're using Python 3.8 you can call threading.get_native_id() 以获取当前执行函数的线程 ID。

如果您要在同一个进程中创建 10 个线程,每个线程应该 return 为 os.getpid() 设置相同的值,但应该 return 为 threading.get_native_id() 设置 10 个不同的 ID .

此外,进程中的一个线程可以生成另一个线程 单独的 进程。例如,单个进程(读取:应用程序)可以创建 10 个线程,并且在每个线程中可以生成一个外部应用程序(读取:进程),但该进程不 拥有 线程生成它的线程就像线程被生成它的进程拥有

另一种基本的思考方式,所有 进程 都是 OS 的子进程,所有 线程 都是子进程父进程,无论哪个线程或进程创建了什么。

Are every independent functions different process? Would a class methods be threads as they share memory? would recursive functions be thread?

没有。每个函数都位于同一个进程内存 space 中,包括 类 及其成员函数。递归函数既不是进程也不是线程,它们是调用自己的函数。

您可以创建一个调用特定函数的线程,并且该函数可能是递归的,但是同样,您必须让您的代码专门创建一个线程并利用函数地址,该地址位于您创建的进程中init 代码被调用(main 在其他语言中)。

If threading or processing module is not used, how can it be differentiated?

再次参考前面的几点,你通过理解process is and what a thread是什么来区分它。

and IS there a need to differentiate them?

是的。从概念上讲,它们是不同的东西,一旦您真正开始编写各种类型的多线程、多进程、内存映射代码,您就需要了解这种差异以及它与您的代码的关系。

至少,如果您在职业生涯中从未编写过一行多线程代码,那么至少了解它们之间的关系很重要。