栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么线程共享堆空间?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么线程共享堆空间?

要将数据从一个线程传递到另一个线程时该怎么办?(如果您从未这样做过,那么您将编写单独的程序,而不是一个多线程程序。)有两种主要方法:

  • 您似乎理所当然的方法是 共享内存 :除了有令人信服的理由要特定于线程的数据(例如堆栈)外,所有数据都可以被所有线程访问。基本上,有一个共享堆。这样可以 提高速度 :只要一个线程更改某些数据,其他线程就可以看到它。(限制:这个,如果线程在不同的处理器上执行的是不正确的:有程序员需要工作尤其难以正确地使用共享内存 高效率。)大多数主要命令式语言,特别是Java和C#,青睐这种模式。

每个线程可能有一个堆,再加上一个共享堆。这要求程序员决定将哪些数据放入何处,而这往往与现有的编程语言不能很好地融合在一起。

  • 双重方法是 消息传递 :每个线程都有自己的数据空间;每个线程都有自己的数据空间。当一个线程想要与另一个线程通信时,它需要显式地向另一个线程发送一条消息,以便将数据从发送者的堆复制到接收者的堆。在这种情况下,许多社区都喜欢调用线程进程。这可以为您提供 安全性 :由于一个线程一时无法覆盖其他线程的内存,因此避免了很多错误。 分发的 另一个好处是:您可以使线程在不同的计算机上运行,​​而无需在程序中更改一行。您可以找到适用于大多数语言的消息传递库,但是集成往往不太好。理解消息传递的良好语言是Erlang和JoCaml。

实际上,消息传递环境通常至少在后台使用共享内存,只要线程在同一台计算机/处理器上运行即可。这节省了大量时间和内存,因为从一个线程向另一个线程传递消息就不需要复制数据了。但是由于共享内存没有暴露给程序员,因此其固有的复杂性仅限于语言/库的实现。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/508217.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号