问题描述
据我所知,线程和进程的区别在于线程共享资源。
我不确定这是否从一种语言到另一种语言不同,但是您如何区分 线程和进程一般还是在 Python 中?
每个独立的功能都是不同的进程吗? 类方法在共享内存时会是线程吗?递归函数会是线程吗?
如果不使用线程或处理模块,如何区分?和 有必要区分它们吗?
谢谢
解决方法
我会直接回答你的问题:
据我所知,线程和进程的区别在于线程共享资源。
这不是真的,至少从你的理解来看不是这样。考虑到您可以同时在 Notepad
和 WordPad
中编辑文件;两者都是共享相同资源的不同进程;在这种情况下是一个文件。
从概念上讲,进程是共享操作系统和其他进程资源的单个“应用程序”,而线程是共享的单个“执行上下文” 进程的相同基本资源。
它比这稍微复杂一点,但从高层次来看,这是进程和线程之间的基本区别。
我不确定这是否因一种语言而异,但您如何区分一般或 Python 中的线程和进程?
鉴于前面的观点,在一般的基本上下文中,一个线程归一个进程所有,每个进程至少有一个一个线程。
从代码的角度来看,您可以通过获取进程 ID 和线程 ID 来区分,这确实取决于您的语言。
对于 Python,您可以 import os
然后调用 os.getpid()
以获取当前的进程 ID,如果您使用的是 Python 3.8,则可以调用 {{3}获取当前执行函数的线程 id。
如果您要在同一个进程中创建 10 个线程,则每个线程应为 os.getpid()
返回相同的值,但应为 threading.get_native_id()
返回 10 个不同的 ID。
此外,进程内的线程可以产生另一个线程或单独进程。例如,单个进程(读取:应用程序)可以创建 10 个线程,并且在每个线程中可以产生一个外部应用程序(读取:进程),但该进程不属于产生它的线程拥有就像线程由产生它的进程拥有一样。
另一种基本的思考方式,所有进程都是操作系统的子进程,所有线程都是父进程的子进程,无论哪个线程或进程创建了什么。
每个独立的功能都是不同的进程吗?类方法在共享内存时会是线程吗?递归函数会是线程吗?
没有。每个函数都位于相同的进程内存空间中,包括类及其成员函数。递归函数既不是进程也不是线程,它们是调用自身的函数。
您可以创建一个调用特定函数的线程,该函数可能是递归的,但同样,您必须让您的代码专门创建一个线程并利用位于 {{ 创建的进程中的函数地址1}} 代码被调用(init
在其他语言中)。
如果不使用线程或处理模块,如何区分?
再次参考前面的观点,您可以通过理解 threading.get_native_id()
是什么和 process 是什么来区分它。
是否需要区分它们?
是的。从概念上讲,它们是不同的东西,一旦您真正开始编写各种类型的多线程、多进程、内存映射代码,您就需要了解这种差异以及它与您的代码的关系。
至少,如果您在职业生涯中从未编写过一行多线程代码,那么至少了解它们之间的关系很重要。