模式 | 平台 | 占用内存大小 | 轻量否? | 同步机制 | 分布式 |
---|---|---|---|---|---|
akka(actor) | JVM | 400 Bytes | 是 | 消息传递 | 支持 |
goroutine | Native | 2K Bytes | 是 | 消息传递 | 不支持 |
Java Thread | JVM | 1M Bytes | 否 | 共享变量 | 不支持 |
计算密集型性能对比
通过级数计算PI的值,来比较Java线程,akka和goroutine之间的性能差异。
测试环境:
- 1.4Ghz intel core i5 双核
- 内存8G
结果分析
从以上的性能对比过后,发现在计算密集型的场景下,轻量与不轻量并没有产生性能上的巨大差异。这是为什么呢?问题就在计算密集型上,每个Actor或者goroutine或者Thread往往从创建到计算完成后被销毁,时间跨度上都很小,计算任务被提交之后,cpu足够快,往往不等被争夺cpu就计算完成,所以上下文切换几乎没有。而且Java线程通过线程池来维护线程,避免了创建和销毁线程的额外开销。
todo
IO密集型