线程和进程

问题描述:

什么是线程的最佳定义和什么是进程? 如果我调用一个函数,我怎么知道一个线程正在调用它或一个进程(或者我不理解它?!)。这是一个多核系统(quadcore)。线程和进程

+2

另请参见进程和线程之间有什么区别:http://*.com/questions/200469/what-is-the-difference-between-a-process-and-a-thread – 2010-08-08 08:41:22

有一点需要补充的是多核处理器如何处理这个问题。将线程看作是代码的顺序执行。

CPU中的内核一次只能执行一个线程。因此,如果由于程序正在等待I/O操作完成而导致此线程被阻塞,则该进程被阻止(非常简单的示例:Word未响应)。多线程允许我们同时执行多个代码路径。 “同一时间”是一个谎言,因为在一个核心中一次只能执行一个线程,但CPU给每个线程一小段时间,所以看起来好像所有这些线程都在同时。一个很好的例子就是Word中的拼写检查器。

如果您有多个内核,唯一的区别是在N-Core CPU中可以同时执行N个线程。为了简化很多,线程所属的进程并不重要。更简单地说,你会期望N倍的性能提升。 :-D

http://wiki.answers.com/Q/What_is_the_difference_between_a_computer_process_and_thread

单个进程可以具有与在同一进程中运行的其他线程,因此可以在相同的数据容易地设定操作共享全局数据和地址空间的多个线程。进程不共享地址空间,如果要共享数据,则必须使用不同的机制。

如果我们考虑运行一个文字处理程序作为一个进程,那么在后台发生的自动保存和拼写检查功能是该进程的不同线程,它们都在相同的数据集上运行(您的文档) 。

在我所知的每一个现代操作系统中,所有东西都运行在一个线程中,这个线程在一个进程中运行。 操作系统可以跟踪多个进程,每个进程可以托管任意数量的线程。因此,所有代码都在进程内的线程内执行(因为线程在进程中运行)。

两者的主要区别在于每个进程都有自己的虚拟地址空间。单独的进程无法访问彼此的数据,文件句柄或其他任何内容,并且基本上不知道存在其他进程。另一方面,进程中的每个线程共享相同的地址空间,因此所有线程都可以检查或修改彼此的数据,调用相同的函数和其他所有内容。

通常(但不总是)一个程序由一个进程和多个线程组成的情况。

进程由一个或多个线程组成(大多数环境默认为一个线程)。一个进程可以创建额外的线程。

就像之前的回答所说的,每个进程都有自己的内存空间(每个进程都有一个指向0x12345的指针,每个进程的内存位置都有不同的值),而进程的所有线程实际上都指向完全相同的内存位置,因为它们都在同一个内存空间。

当调用一个函数时,它几乎总是在调用者正在运行的同一线程上调用。在Objective-C中,有一些例外(performSelectorOnMainThread),也可能有其他语言,但是这种功能只有在特殊情况下才需要。

+0

在我熟悉的所有语言(以及大多数开发人员使用)中,所有函数都在调用该函数的同一线程上执行。如果有问题的函数碰巧抛出一个新的线程或者将一个方法调用发送到另一个线程上,那么与您所说的不同。 – 2008-12-05 19:28:44

从用户的角度来看,主要区别在于线程彼此共享内存,而进程却不是。这意味着您可以轻松地在线程之间共享数据,而流程需要某种操作系统调用来执行此操作。有些人称这是线程的好处,但在多个控制线程之间共享数据充满了危险,所以可以认为过程导致更可靠的代码。

还有很多,特别是如果你是一个操作系统的人。