正如之前多次说过的那样,你可以在一个actor中抛出一个新线程(将一个长处理计算放入actor{}块中),并且生成的计算将安全地运行在同一个线程池中(由actor调度器使用).
actor{
var i = 0
case msg => actor {
// computation
i = i + 1 // is `i` still thread safe?
// looks like it can be access simultaneosly from 2 two threads now
// should I make it @volatile?
}
reply(i)
}
Run Code Online (Sandbox Code Playgroud)
但是,它是否是线程安全的,并且它通常遵循原始设计,它表明在一个时刻只有一个线程可以与一个actor一起工作?
从另一个人那里产生演员是完全安全的.
但是,无论生成的方式和位置如何,都不会在参与者之间共享可变状态.
演员的全部意义在于他们应该通过邮箱与消息进行沟通.滥用此模型并且演员不会提供比并发问题更多的保护.