(请注意,这个问题虽然涉及并行编程,但主要是在python3.x的上下文/应用程序下构建的)
目前,我从阅读中得到的是:
进程是一组指令,以及它运行时伴随的所有资源。它将包括以下代码,以及输入/输出/资源/内存/文件句柄/等等。换句话说,它是整个厨房水槽。
# this script, while running as a whole, is considered a process
print('hello world')
with open('something.txt', 'a') as file_handle:
for i in range(500):
file_handle.write('blablabla')
print('job done!')但是,如果我想在相同的时间内做更多的事情--为了最大化我的计算机的处理能力--我可以选择产生更多的进程或线程。与上面简单的python脚本流程类比相比,我应该选择哪一个呢?生成另一个进程是否相当于在更改文件名的同时再次回忆整个事件?
# changed filename (is this "another process?")
print('hello world')
with open('something_else.txt', 'a') as file_handle:
for i in range(500):
file_handle.write('blablabla')
print('job done!') 我也有一个模糊的想法,即单个进程可以包含多个线程,这是否相当于加载一堆更“概念性”的循环呢?
# like would this be a "thread" a barebones "subset" of an entire program?
with open('something.txt', 'a') as file_handle:
for i in range(500):
file_handle.write('blablabla')这两个人到底有什么区别呢?在网上搜索时,我发现进程更加独立和重量级,而线程更轻量级,“更容易彼此共享内存”。但这到底意味着什么呢?为什么进程不能彼此共享内存呢?如果线程可以“共享内存”,我为什么不能访问来自同一脚本(例如from thread_a import var_data)产生的不同线程的不同变量。
最后,究竟是什么在计算?CPU是否计算线程或进程?还是一个包含多个核心/等等的总括性术语?核心计算进程或线程吗?
摘要:
1)使用一个简单的python脚本作为一个进程的示例,与生成另一个进程/线程的等价性是什么?(例如,重复脚本/脚本子集/部分代码)
2)进程与线程有什么根本区别,进程能够做线程不能做的事情的例子是什么?
3)为什么在进程中内存/数据常常被描述为“更难共享”而不是线程?线程是如何共享数据的呢?
4)执行CPU的计算线程或进程。核心是否计算线程或进程?
( 5)什么时候使用什么的一般准则/例子?
发布于 2016-02-15 14:48:45
要开始回答这个问题,您必须了解什么是python GIL。基本上,Python的设计是让代码的任何部分访问内存。为了避免问题(例如同时对同一内存进行多次调用.),有一个Lock禁止同时执行2个任务。这就是为什么python纯粹是一个过程,一个接着一个地执行任务。
在现代编程中,人们希望更好地使用多核处理器,从而将程序并行化以提高性能。由于GIL的存在,有两个解决办法:
Threading是一个允许在不同线程中“同时”生成多个任务的模块。问题是,它实际上不是同时进行的,而是会被切割成原子任务,并在不同的任务之间切换。但是你永远不会同时拥有两个任务,所以你仍然可以像往常一样共享内存,这就是为什么它很简单的原因。multiprocessing允许您生成真正的进程,这些进程将同时工作。但是代价是,您不能在这些进程之间安全地共享内存(以经典的方式)。在其中包含多个线程的多个进程没有问题。不过,你并不是一个人。有几种方法可以安全地在进程之间进行通信,例如使用Lock。您可以在这个这里上看到更多信息。总之,线程和进程允许您为其他任务分离一些任务,从而为您改进基本的过程程序提供了一种方法。在某些语言中,它们的工作方式并没有太大的区别,但是在Python中,主要要记住的是:
https://stackoverflow.com/questions/35400059
复制相似问题