Multithreading 在Scala中创建分布式内存服务
您认为Scala如何帮助我们编写像Redis这样的分布式内存服务(但多线程) Scala编程鼓励我们使用不可变数据,以避免共享数据和竞争条件,但是在这种数据存储中,不可变数据对我们没有帮助(我认为)Multithreading 在Scala中创建分布式内存服务,multithreading,scala,distributed-system,Multithreading,Scala,Distributed System,您认为Scala如何帮助我们编写像Redis这样的分布式内存服务(但多线程) Scala编程鼓励我们使用不可变数据,以避免共享数据和竞争条件,但是在这种数据存储中,不可变数据对我们没有帮助(我认为) 阻塞线程将是解决方案?Scala同样能处理不可变数据和可变数据 当然,强烈建议使用不可变数据——对于任何可以跨线程/参与者共享的数据 但是也强烈鼓励使用专用于单个线程/参与者的可变数据,即在一个永远不能跨线程/参与者共享的上下文中 一个简单的高级并发模式是: 将可变数据私有化给每个参与者: 将可变
阻塞线程将是解决方案?Scala同样能处理不可变数据和可变数据 当然,强烈建议使用不可变数据——对于任何可以跨线程/参与者共享的数据 但是也强烈鼓励使用专用于单个线程/参与者的可变数据,即在一个永远不能跨线程/参与者共享的上下文中 一个简单的高级并发模式是:
参与者
:
- 将可变类型专用于单个参与者
- 使用actor-act/receive/react方法操纵可变数据
Actor
s之间共享不可变数据
- 向其他参与者发送消息-但是将可变数据转换为不可变数据,并且只在参与者之间发送后者李>
参与者发送对参与者的引用
- 由于(1),演员本身变得可变
- 由于(2),它们不应该被共享
- 这将阻止ActorA调用ActorB上的任何方法-所有通信都应通过消息(方法
!
和!!
)
Future[T]
。然后通过Future.onComplete
(或者更好地通过Future.flatMap/Map/withFilter/Recover
及其理解等价物指定响应处理代码,这是围绕onComplete
的方便的“一元”包装)
Scala同样能很好地处理不可变数据和可变数据 当然,强烈建议使用不可变数据——对于任何可以跨线程/参与者共享的数据 但是也强烈鼓励使用专用于单个线程/参与者的可变数据,即在一个永远不能跨线程/参与者共享的上下文中 一个简单的高级并发模式是:
参与者
:
- 将可变类型专用于单个参与者
- 使用actor-act/receive/react方法操纵可变数据
Actor
s之间共享不可变数据
- 向其他参与者发送消息-但是将可变数据转换为不可变数据,并且只在参与者之间发送后者李>
参与者发送对参与者的引用
- 由于(1),演员本身变得可变
- 由于(2),它们不应该被共享
- 这将阻止ActorA调用ActorB上的任何方法-所有通信都应通过消息(方法
!
和!!
)
Future[T]
。然后通过Future.onComplete
(或者更好地通过Future.flatMap/Map/withFilter/Recover
及其理解等价物指定响应处理代码,这是围绕onComplete
的方便的“一元”包装)
Scala同样能很好地处理不可变数据和可变数据 当然,强烈建议使用不可变数据——对于任何可以跨线程/参与者共享的数据 但是也强烈鼓励使用专用于单个线程/参与者的可变数据,即在一个永远不能跨线程/参与者共享的上下文中 一个简单的高级并发模式是:
参与者
:
- 将可变类型专用于单个参与者
- 使用actor-act/receive/react方法操纵可变数据
Actor
s之间共享不可变数据
- 向其他参与者发送消息-但是将可变数据转换为不可变数据,并且只在参与者之间发送后者李>
参与者发送对参与者的引用
- 由于(1),演员本身变得可变
- 由于(2),它们不应该被共享
- 这将阻止ActorA调用ActorB上的任何方法-所有通信都应通过消息(方法
!
和!!
)