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.
这不是真的,至少从你的理解来看不是这样。考虑到您可以同时在 Notepad
和 WordPad
中编辑一个文件;两者都是共享相同资源的不同进程;在这种情况下是一个文件。
从概念上讲,进程是一个共享操作系统和其他进程资源的“应用程序”,而线程是共享 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?
是的。从概念上讲,它们是不同的东西,一旦您真正开始编写各种类型的多线程、多进程、内存映射代码,您就需要了解这种差异以及它与您的代码的关系。
至少,如果您在职业生涯中从未编写过一行多线程代码,那么至少了解它们之间的关系很重要。
据我了解,线程和进程的区别在于线程共享资源。
我不确定这是否因一种语言而异,但您如何区分 一般或 Python?
中的线程和进程每个独立的函数都是不同的进程吗? class 方法会因为共享内存而成为线程吗?递归函数会是线程吗?
如果没有使用threading或者processing模块,怎么区分呢?和 有必要区分吗?
谢谢
我会直接回答你的问题:
From what I understand, thread and process differs in that thread shares resources.
这不是真的,至少从你的理解来看不是这样。考虑到您可以同时在 Notepad
和 WordPad
中编辑一个文件;两者都是共享相同资源的不同进程;在这种情况下是一个文件。
从概念上讲,进程是一个共享操作系统和其他进程资源的“应用程序”,而线程是共享 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?
是的。从概念上讲,它们是不同的东西,一旦您真正开始编写各种类型的多线程、多进程、内存映射代码,您就需要了解这种差异以及它与您的代码的关系。
至少,如果您在职业生涯中从未编写过一行多线程代码,那么至少了解它们之间的关系很重要。