我已经阅读了很多关于此链接中线程和进程之间区别的已发布答案
但是理解它们仍然是抽象的,比如共享内存和分离内存,谁能举个例子来解释一下,比如我们有一个程序,线程是哪一部分,进程是哪一部分?
任何帮助表示赞赏。
我已经阅读了很多关于此链接中线程和进程之间区别的已发布答案
但是理解它们仍然是抽象的,比如共享内存和分离内存,谁能举个例子来解释一下,比如我们有一个程序,线程是哪一部分,进程是哪一部分?
任何帮助表示赞赏。
让我在这里打个比方。
你正在一个大图书馆里独自做一些家庭作业。你经历它,一个问题一个问题。当你解决了一个问题时,你会转移到另一个问题。那是一个单线程、单进程的应用程序。
你注意到这很慢,所以你打电话给几个朋友(产生新线程)。你开始做更多的事情,因为你可以并行处理几个问题,而且因为你们都在同一个房间里,你们可以很容易地互相交谈(共享内存)。不幸的是,您只有一本参考书,并且必须不断传递它(共享资源)。当您的一些小组成员需要同时处理类似问题(资源争用、死锁)时,这会引起争论。然后有一个问题,您的两个小组成员试图同时写下相互矛盾的答案并发生争执(并发错误)。那是共享内存的多线程。
你意识到在镇上的图书馆里还有另一本教科书。你把他们迄今为止所做的一切(复制内存)的副本发送给你的一些朋友(分叉一个新进程)去那里工作。现在他们可以完成更多工作,并且不再经常与您争吵(减少资源争用),但这是有代价的——他们只能通过手机与您交谈(进程间通信),因此交流问题和答案很不错昂贵的。此外,过了一段时间,他们的答案就不再像你的那样了,除非你花很多时间让彼此保持更新,这会消耗你很多时间(同步)。那是多个进程。
假设您在程序中有一个全局变量。在线程程序中,所有线程共享同一个全局变量,因此在一个线程中更改它会在所有线程中更改它。另一方面,在你 fork 一个新进程中,全局变量在不同进程中是分开的,一个进程中的更改不会反映在另一个进程中。