繁体   English   中英

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

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

据我了解,线程和进程的不同之处在于线程共享资源。

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

每个独立的功能都是不同的过程吗? class 方法是否会成为线程,因为它们共享 memory? 递归函数会是线程吗?

如果不使用线程或处理模块,如何区分? 是否需要区分它们?

谢谢

我会直接回答你的问题:

据我了解,线程和进程的不同之处在于线程共享资源。

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

从概念上讲,进程是共享操作系统和其他进程资源的单个“应用程序”,而线程是共享进程相同基本资源的单个“执行上下文”。

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

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

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

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

For Python, you would import os and then call os.getpid() to get the current process ID, and if you're using Python 3.8 you can call threading.get_native_id() to get the thread id from which the function is currently executed上。

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

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

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

每个独立的功能都是不同的过程吗? class 方法是否会成为线程,因为它们共享 memory? 递归函数会是线程吗?

不。每个 function 都存在于同一个进程 memory 空间中,包括类及其成员函数。 递归函数既不是进程也不是线程,它们是调用自身的函数。

您可以创建一个线程,该线程调用特定的function,以及ZC1C1C425268E68E68385D1AB5074C174C17A94F17A94F14F144Z可能会恢复行为,但是您必须在ZC1C425268E685D1B5074C174C174F14F14范围内创建init 。其他语言的main内容)。

如果不使用线程或处理模块,如何区分?

再次参考前面的几点,您可以通过了解什么是进程和什么是线程来区分它。

是否需要区分它们?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM