Smalltalk图像中的对象数量是否有上限?

Dav*_*day 5 smalltalk squeak pharo

我正在组建一个NLP实验,其中概念是系统中的代理,旨在产生由新概念组成的Emergent属性(这里是那些不知道Emergence是什么的链接).Smalltalk(特别是Pharo方言)似乎是这种应用程序的理想选择,因为我可以轻松地创建完全封装的概念对象,这些对象彼此相关,作为独立代理,而SmallTalk允许我检查系统正在运行的状态.

我担心的是,如果存在太多对象并且所有对象都相互发送消息,系统是否会开始阻塞.从理论上讲,我的实现可以产生数百万个概念对象,如果系统无法处理那么大的东西,我不想把时间花在SmallTalk上.

  1. 有关SmallTalk图像中活动对象数量的限制因素(软件因素,而不是硬件)吗?

  2. 系统能否处理具有数百万个chatty对象的系统中存在的消息流量?

预先感谢您的帮助!

Wil*_*ung 3

我相信 Pharo 中对象指针的内部工作大小仍然是 32 位。关于 64b 版本的争论一直存在,但在 64b 机器上运行 32b VM 是一回事,而拥有真正的 64b VM 又是另一回事。

因此,存在一个隐含的限制,但仍然有容纳“数百万”对象的空间。开始达到“数百万”,您很可能会遇到一些限制。

最终拥有数百万个对象并不是真正的问题,现在它转移到控制线程,而 Pharo 在这种情况下不会做太多线程处理。所以真正重要的是你将拥有多少个实际的不同上下文,而不一定是对象本身。

拥有数百万个对象相互通信的链并不是什么大问题,您只会遇到底层虚拟机中存在的任何消息传递开销,从而限制原始性能。Pharo 相当快,但它不如 Java 快。是否足够快,由你来回答。

我也无法谈论 Pharo GC 处理数百万个活动对象的能力如何,我只能建议现在是 2013 年,Squeak(Pharo 所基于的)自 90 年代中期以来就已经存在,GC 技术现在已经相当成熟,我并不怀疑 Pharo 的 GC 在这方面非常糟糕。

我会简单地做一些微观基准测试并亲自尝试。