线程和进程

时间:2008-12-05 18:03:52

标签: multithreading process

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

5 个答案:

答案 0 :(得分:6)

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

单个进程可以拥有多个线程,这些线程与在同一进程中运行的其他线程共享全局数据和地址空间,因此可以轻松地在同一数据集上运行。进程不共享地址空间,如果要共享数据,则必须使用不同的机制。

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

答案 1 :(得分:4)

要添加的一件事是多核处理器如何处理这个问题。将线程视为代码的顺序执行。

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

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

答案 2 :(得分:2)

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

两者之间的主要区别是每个进程都有自己的虚拟地址空间。单独的进程无法访问彼此的数据,文件句柄或其他任何内容,并且基本上不知道存在其他进程。

另一方面,进程中的每个线程共享相同的地址空间,因此所有线程都可以检查或修改彼此的数据,调用相同的函数和其他所有内容。

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

答案 3 :(得分:1)

进程由一个或多个线程组成(大多数环境默认使用一个线程)。一个进程可以创建其他线程。

与前面的答案一样,每个进程都有自己的内存空间(每个进程都有一个指向0x12345的指针,每个进程的内存位置都有不同的值),而进程的所有线程实际上都指向了精确的相同的内存位置,因为它们都在相同的内存空间中。

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

答案 4 :(得分:1)

从用户的角度来看,主要区别在于线程彼此共享内存,而进程则没有。这意味着您可以轻松地在线程之间共享数据,而进程需要某种类型的OS调用才能这样做。

有人称这是线程的好处,但是在多个控制线程之间共享数据充满了危险,因此可以认为流程会带来更可靠的代码。

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