创娱开源帮助中心

首页 >> 游戏资讯
如何实现并发(python如何实现并发)
来源:本站 作者:超级管理员 2022-08-15 03:45:00

摘要:

如何实现并发?python如何实现并发?传统的并发编程我们都很熟悉,以Java举例,那就是通过共享内存和锁的方式来进行并发控制。但你有没有想过还有其他方式可以实现高并发呢?今天我们就来看看Actor并发编程模型,并从一致性和隔离性的角度来分析为什么有Actor并发编程模型。Actor模型其实就

如何实现并发?python如何实现并发?传统的并发编程我们都很熟悉,以 Java 举例,那就是通过共享内存和锁的方式来进行并发控制。但你有没有想过还有其他方式可以实现高并发呢?今天我们就来看看 Actor 并发编程模型,并从一致性和隔离性的角度来分析为什么有 Actor 并发编程模型。Actor 模型其实就是定义一组规则,这些规则规定了一组系统中各个模块如何交互及回应。所以如果你要并行处理3条消息,你需要把这条消息发给3个 Actors。

如何实现并发(python如何实现并发)

我们都熟悉传统的并发编程。以Java为例,即通过共享内存和锁来进行并发控制。但是你有没有想过还有其他方法可以实现高并发?今天我们就来看看Actor并发编程模型,从一致性和隔离性的角度来分析为什么会有Actor并发编程模型。

演员模型介绍

如今单核CPU的发展已经到了瓶颈。要提高硬件的速度,更重要的是增加CPU核心的数量。针对这种情况,为了提高我们程序的效率,还应该从并发性入手。传统的多线程方式极易出现bug,且难以维护,不过不用担心,今天会引入另一种并发模式,在一定程度上解决这些问题,那就是Actor模型。

参与者模型实际上定义了一组规则,这些规则指定了一组系统中的模块如何交互和响应。在一个Actor系统中,Actor是最小的单元模块,系统由多个Actor组成。每个演员都有两样东西,一个是邮箱,一个是自己的状态。同时,Actor具有接收和发送功能。下面的scala代码用于给出一个近似的Actor示例:当Actor收到一条消息时,它将执行以下三个动作之一:

创造其他演员。

向其他参与者发送消息。

修改自己的状态。

请注意,尽管许多参与者同时运行,但一个参与者只能按顺序处理消息。也就是说,其他演员给一个演员发三条消息,一次只能处理一条消息。因此,如果您想要并行处理3条消息,您需要将这条消息发送给3个参与者。

下图显示了一个简单的参与者模型系统:

了解了演员模型的一般规则之后,我们再用两个具体的例子来看看演员模型的优缺点。

二。两个例子

2.1素数计算

假设我们现在有一个任务,需要找出10万以内的素数个数,用多线程实现。

下图显示了使用共享内存和以Actor模型的方式执行并发执行的方式。

这里有两种处理并发的不同方法。传统的方法是通过锁定/同步来实现并发。每次同步获取当前值,并要求一个线程判断该值是否为素数。如果是,通过同步使计数器加1(这里的解释只是提供思路,这种方法自然有很大的优化空间)。

演员模式不一样。它将这个过程分成几个模块,也就是几个参与者。每个参与者负责不同的部分,这些参与者通过消息传递的方式协同工作,并且主计算可以有多个参与者参与,通过多个参与者的协作实现并发。

2.2银行转账

银行转账的任务描述很简单。假设有两个用户,现在用户A转账100元给用户b,这个演员模型应该怎么设计?

用户A和用户B显然是两个Actor,但是我们还需要一个Actor,可以控制用户A Actor和用户B Actor,我们称之为transfer manager Actor。那么流程图如下。

可以看到,当一个转账需求来临时,演员管家会先给用户A演员发送扣100元的信息,收到扣费成功的消息后再给用户B演员发送消息,要求他加100元。

一切看起来都很美,不是吗?但是有一个问题,就是在用户A演员扣费期间,用户B演员是不受限制的。这个时候运营用户B演员是合法的!比如说A转账给B 100元。在一致的环境下,账户A减少100,账户B增加100,然后B可以转账给他人。在Actor中,可能是A减了100后,B并没有增加100。这时候B转50给C,B的账户会先减50,再增100,这样就容易出现脏读、幻影读等一些问题。在这种情况下,简单的参与者模型是脆弱的,需要添加其他机制来确保一致性。

看到这里,你就明白了,演员模式不是万能的,只是有一些缺点。也就是对于一致性要求强的场景比较弱。

3.为什么会出现演员模特?

在说为什么之前,我们需要先说一下事物并发中的一致性和隔离性。

也就是说,一致性使数据保持一致。比如银行转账,用户A给用户B转账100元,在没有其他干扰的情况下,转账完成时。用户A的账户必然减少这100元,用户B的账户必然增加这100元,满足了一致性。你不能说用户A减50或者用户B增200。

隔离可以理解为牺牲一致性需求的一部分来提高性能。比如完全一致的情况下,任务都是串行的,然后就没有隔离了。

了解了这些,你就知道为什么会有演员模特了。

在传统的并发模式下,共享内存往往一致性强,隔离性弱。例如,悲观锁定/同步实际上是一种具有强一致性的控制并发的方法。Actor模型天生隔离性强,一致性弱,所以Actor模型在并发性上有很好的表现,易于控制和管理。

这样你就能明白Actor模型适合什么样的并发场景了。在对一致性要求不是很高,对性能要求很高的情况下,演员模型无疑是一个值得尝试的方案。比如现在很多分布式框架中(Hadoop、Spark等。),它们之间的RPC通信大多是通过Actor模型而不是传统的并发编程来实现的。

如果您需要Java架构师的相关信息,可以稍后关注您的私信,回复“信息”即可获得免费的架构视频资料。记得像重点一样转发!



上一篇:黎明黑夜系列皮肤登陆英雄联盟手游 下一篇:快手电丸不是单纯的小游戏平台