概述
当你想将数据从一个线程传递给另一个线程时,你会做什么? (如果你没有这样做,你将会编写单独的程序,而不是一个多线程程序。)有两种主要方法:
>您认为理所当然的方法是共享内存:除了具有令人信服的理由是线程特定的数据(如堆栈)之外,所有数据都可以被所有线程访问。基本上有一个共享堆。这给你的速度:任何时候一个线程改变一些数据,其他线程可以看到它。 (限制:如果线程正在不同的处理器上执行,这是不正确的:程序员需要非常努力地正确有效地使用共享内存)。大多数主要的命令式语言(尤其是Java和C#)都倾向于使用该模型。
每个线程可以有一个堆,加上一个共享堆。这要求程序员决定哪些数据放在哪里,而且通常不能与现有的编程语言联网。
>双重方法是消息传递:每个线程都有自己的数据空间;当一个线程想要与另一个线程通信时,它需要向另一个线程显式地发送消息,以便将数据从发送者的堆复制到接收方的堆中。在这种情况下,许多社区喜欢调用线程进程。这给了你安全:由于线程不能覆盖其他线程的内存,所以很多错误都可以避免。另一个好处是分发:您可以使线程在不同的机器上运行,而无需更改程序中的单行。您可以为大多数语言找到消息传递库,但集成往往不那么好。理解信息传递的良好语言是Erlang和JoCaml。
事实上,消息传递环境通常在场景后面使用共享内存,至少只要线程在相同的机器/处理器上运行。由于将消息从一个线程传递到另一个线程,因此无需制作数据副本,因此节省了大量时间和内存。但由于共享内存不会暴露给程序员,因此其固有的复杂性仅限于语言/库实现。
最后
以上就是壮观飞机为你收集整理的java线程的堆空间共享_java – 为什么线程共享堆空间?的全部内容,希望文章能够帮你解决java线程的堆空间共享_java – 为什么线程共享堆空间?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复