我可以在一台机器上用ZIO创建多少个光纤?



我意识到确切的数字取决于很多东西,所以我真的在寻找一个数量级,比如MacBook Pro。

是100还是1000 ?数以百万计的人吗?更多?

例如,我已经计算过我可以在这台机器上运行大约1M个例程,并且我试图了解ZIO纤维将大致相同或更多…

纤维的主要资源消耗将是它消耗的堆内存,加上(有争议的)捕获其状态的闭包消耗的内存。因为JVM(甚至JVM中的不同GC算法)在给定对象占用内存的字节数上是不同的,这甚至取决于运行时设置(例如,如果堆是32GiB或更小,对象引用可以用32位编码,而大于32位的堆将需要更多的空间用于每个对象引用)。

"typical"在jvm中,光纤的内存开销只有几百字节。这也大约是Akka actor的开销(它可以像gooutine, ZIO纤维,Cats Effect纤维或Scala future一样,被认为是以比线程更有效的方式建模进程的一种手段(这忽略了各自模型细节中的重大哲学差异)),并且已经确定每个GiB的堆可以创建实质上超过一百万个actor。因此,可以合理地预计,每GiB的堆可以创建数百万个光纤。

应该注意的是,在任何时间点,消耗CPU的纤维数量都不可能超过内核/线程的数量,所以这是绝对可能的,如果你有更多的纤维/线程程序/actor准备消耗CPU,你可能会看到等待调度的纤维产生的大量延迟效应(所谓的"线程饥饿")。