子进程和线程之间的区别

Fre*_*per 9 multithreading subprocess

子进程和线程有什么区别?我用谷歌搜索,但无法找到合适的答案.上面提供的答案链接区分了进程和线程,但我想知道子进程和线程之间的区别.由于子进程也是一个进程,它与进程和线程之间的差异大致相同,但我想知道子进程和线程之间是否存在某些特定的差异,这些差异不在进程和线程之间.

小智 11

首先,我们必须了解Process到底是什么,然后是Thread,如果可以的话,那么这个问题的答案会更容易。

进程与线程

过程(有时也被称为任务)是一个程序的执行(即,在运行)实例。线程是轻量级进程,可以并行运行,并与其父进程(即创建它们的进程)共享地址空间(即,一系列内存位置)和其他资源。

上面的部分摘自该链接:http : //www.linfo.org/context_switch.html

进程是正在执行的程序。例如,当我们用C或C ++编写程序并进行编译时,编译器会创建一个二进制代码原始代码和二进制代码都是程序。当我们实际运行二进制代码时,它成为一个过程。与被认为是“被动”实体的程序相反,过程是“主动”实体。单个程序在多次运行时可以创建许多进程,例如,当我们多次打开.exe或二进制文件时,许多实例开始(创建了许多进程)。

上面的部分来自此链接:https : //www.geeksforgeeks.org/gate-notes-operating-system-process-management-introduction/

进程是程序的实例(例如Jupyter笔记本,Python解释器)。进程产生线程(子进程)以处理子任务,例如读取击键,加载HTML页面,保存文件。线程位于进程内部,并共享相同的内存空间。

示例:Microsoft Word 打开Word时,您将创建一个过程。当您开始键入内容时,该过程会产生线程:一个线程读取按键,另一个线程显示文本,一个线程自动保存文件,另一个线程突出显示拼写错误。通过产生多个线程,Microsoft利用了空闲的CPU时间(等待按键或文件加载),从而提高了工作效率。

上面的部分来自此链接:https : //medium.com/@bfortuner/python-multithreading-vs-multiprocessing-73072ce5600b

Python为程序员提供了线程和子进程库以进行多任务处理。两者的目的几乎相同,但是我们选择线程或子过程的目的取决于我们想要的东西。线程对于IO绑定的应用程序可能已经足够好了,但对CPU绑定的应用程序来说却不够好,因为由于Python的GIL和线程问题,它一次只使用SINGLE CPU内核,而一个线程的失败会使整个应用程序崩溃。

子进程对于IO绑定的应用程序和CPU绑定的应用程序均有利,但会占用更多内存。可以同时(并行)使用所有CPU内核,并且单个进程的故障不会影响其他进程。

上面的部分来自此链接:https : //www.quora.com/For-multiprocessing-in-Python-which-library-should-I-use-threading-or-subprocess