显示差异的线程和进程的示例

时间:2013-10-25 06:02:41

标签: c++ c multithreading process multicore

我已经阅读了很多关于此链接中线程和进程之间差异的帖子

What is the difference between a process and a thread?

然而,仍然要抽象地理解它们,比如共享内存和放大器。分离内存,任何人都可以通过给出一个例子来解释它,就像我们有一个程序一样,线程的哪一部分以及该过程的哪一部分?

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

假设您在程序中有一个全局变量。在线程程序中,所有线程共享相同的全局变量,因此在一个线程中更改它将在所有线程中更改它。另一方面,在您分叉新流程时,全局变量在不同流程中是分开的,并且一个流程中的更改不会反映在另一个流程中。

答案 1 :(得分:1)

我在这里使用类比。

你正在一个大型图书馆里独自完成一些家庭作业。你经历它,问题的问题。当你完成一个问题后,你会转到另一个问题。 这是一个单线程的单进程应用程序。

你注意到这很慢,所以你打电话给几个朋友(产生新线程)。你开始做得更多,因为你可以并行处理几个问题,因为你们都在同一个房间,你可以很容易地相互交谈(共享内存) 。不幸的是,您只有一本参考书,并且必须不断传递它(共享资源)。当您的某些组成员需要同时处理类似问题(资源争用,死锁)时,这会引发争论。然后是那个问题,你的两个小组成员试图同时写下相互矛盾的答案并陷入战斗(并发错误)。 那是带共享内存的多线程。

你意识到整个城镇的图书馆里还有另一本教科书的副本。你将你的一些朋友(分发一个新进程)发送给他们迄今为止所做的一切(复制内存)以便在那里工作。现在他们可以做得更多,不经常与你打架(更少的资源争用),但这需要付出代价 - 他们只能通过手机与你交谈(进程间通信)所以沟通问题和答案非常昂贵。此外,过了一段时间他们的答案不再与你的答案真的相似,除非你花了很多时间保持彼此更新,这会耗费你很多时间(同步)。这是多个进程