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



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

进程和线程有什么区别?

然而,理解它们仍然是抽象的,就像共享内存和分离的内存一样,任何人都可以通过举一个例子来解释它,比如我们有一个程序,线程是哪一部分,过程是哪一部分?

任何帮助,不胜感激。

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

让我在这里打个比方。

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

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

你意识到在镇上的图书馆里还有另一本教科书。你派你的一些朋友过来(分叉一个新进程),并附上他们到目前为止所做的一切的副本(复制内存)去那里工作。现在他们可以完成更多工作,并且不会经常与您争吵(更少的资源争用),但这是有代价的 - 他们只能通过手机与您交谈(进程间通信),因此交流问题和答案非常昂贵。此外,一段时间后,他们的答案不再像你的答案,除非你花很多时间让对方保持更新,这会消耗你的大量时间(同步)。这是多个过程

相关内容

  • 没有找到相关文章

最新更新