【问题标题】:examples of thread and process to show the difference [closed]显示差异的线程和进程示例[关闭]
【发布时间】:2013-11-04 02:54:08
【问题描述】:

我已经在这个链接中阅读了很多关于线程和进程之间区别的发布答案

What is the difference between a process and a thread?

但是理解起来还是比较抽象的,比如共享内存和分离内存,谁能举个例子来解释一下,比如我们有一个程序,线程是哪一部分,进程是哪一部分?

感谢任何帮助。

【问题讨论】:

    标签: c++ c multithreading process multicore


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      让我在这里打个比方。

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

      您注意到这很慢,因此您召集了几个朋友(产生新线程)。您开始完成更多工作,因为您可以并行处理几个问题,而且由于你们都在同一个房间里,所以你们可以很容易地互相交谈(共享内存) .不幸的是,您只有一本参考书,并且必须不断地传递它(共享资源)。当您的一些小组成员需要同时处理类似问题(资源争用、死锁)时,这会引起争论。然后是你的两个小组成员试图同时写下相互矛盾的答案并发生争执的问题(并发错误)。 这是共享内存的多线程。

      您意识到在镇上的图书馆里还有另一本该教科书。您将他们迄今为止所做的所有事情的副本(复制内存)发送给您的一些朋友(fork a new process)去那里工作。现在他们可以完成更多工作并且不再经常与您争吵(资源争用减少),但这是有代价的——他们只能通过手机与您交谈(进程间通信),因此交流问题和答案非常昂贵。此外,过了一段时间,他们的答案就不再像你的那样了,除非你花很多时间让彼此更新,这会消耗你很多时间(同步)。那是多个进程

      【讨论】:

      • 非常棒的类比。但是,我不确定一件事,在此过程中,同步的成本很高。在线程中,这很容易,他们共享相同的资源并进行更多的交流,为什么他们有冲突的答案,他们可能会因为资源没有释放或正确持有而出现死锁,他们可能会在资源分配方面发生冲突,但我认为他们的答案应该是一样的。
      • 你不确定什么?
      • 线程可以共享指向同一个内存的指针(参见this answer),如果你不小心,很容易让它们相互踩踏,所以你必须使用锁等原语来按顺序让事情保持理智。
      猜你喜欢
      • 2011-02-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-04
      • 2013-03-08
      • 2013-04-18
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      相关资源
      最近更新 更多