我现在开始我的最后一年的项目。我将从 java 和 scala 的角度研究并发方法。从 java 并发模块出来后,我明白为什么人们说共享状态线程方法很难推理。由于 java 线程运行的非确定性方式,您需要担心关键部分,运行竞争条件和死锁等风险。在 1.5 中,这个推理得到了一些清晰,但仍然远非一目了然。
乍一看,scala 似乎通过演员类消除了这种复杂的推理。这使程序员能够从更顺序的角度开发并发系统并且更容易概念化。但是,对于这个积极的方面,我是否正确地说存在一些缺点?例如,假设我们想在两种情况下对一个大列表进行排序 - 使用 java 创建两个线程将列表一分为二,担心关键部分、原子操作等并执行代码。使用 scala,因为它“不共享任何内容”,您实际上必须将 list/2 传递给两个参与者来执行排序操作,对吗?
我想我的问题是,您为更简单的推理付出的代价是在 scala 中必须将集合传递给您的演员的性能开销?
我正在考虑针对这种效果进行一些基准测试(选择排序、快速排序等;),但是因为一个是功能性的,一个是命令式的——我不会从算法的角度比较苹果和苹果。
我非常感谢你们对上述内容的任何看法,让我有一些想法让我开始。非常感谢。