项目中共享模型的多线程同步

我现在正在编写一个多线程应用程序(准确地说是游戏)作为一个爱好/研究项目。我最近遇到了一个真正的“简单”问题,该问题导致线程之间的同步(如果对您来说很重要,则在c ++中)。

我的主要问题是-我试图学习良好的设计,并在可能的范围内使整个模型静音,这(我认为)是浪费资源,并且只是明确地提出进一步开发的问题。我曾考虑过基于同步事务的整个过程,但是我觉得它不适合游戏类型所需的性能/可扩展性。我是并发编程的新手,我是在这里学习有关并发编程的特定模式的新知识。

关于当前设计的一些话:

  • MVC方法
  • 在线同步由单独的代理处理,在从属客户端和主服务器上相同,并且与任何服务器逻辑分开处理
  • 类似数据库的结构正独立于服务器逻辑进行同步,并且内置了一些较小的订阅/观察者模式,以通知控制器有关更改的信息。

注释

  • 我不查找文档特定的信息(如果它们与性能或设计没有直接关系),我知道我的cppreference
  • 我确实在寻找一些广泛的博客文章/网站,这些文章可以教给我更多有关并发设计模式的信息,
  • 我确实想知道我是否只是在做错误的事情(尽管顺序不正确)。

编辑

就像迈克提到的那样,我没有问这个问题:

1)可以在并发编程中使用的最佳设计模式/规范是什么(在我的情况下最有用),

2)关于并发编程性能,最大的缺点是什么。

guashehdh 回答:项目中共享模型的多线程同步

您是从一个错误的想法开始的。并行性与性能有关,并发性与正确性有关。并发系统不一定是最快的解决方案。一个 good 并发系统可以最小化并明确定义依赖关系;以最小的延迟实现强大的反应性系统。相反,并行系统试图通过最大化其资源利用来最小化其执行时间。这样做可能会使延迟最大化。有重叠,但心态却大不相同。

有许多好的并发语言。 C ++不是其中之一。也就是说,您可以使用任何语言编写良好的并发系统。大多数并发语言都有很强的消息传递偏见,但是大多数语言都可以使用好的消息传递库。

消息传递与底层同步机制不同,它是自身的模型或思考方式。互斥量,信号量等不是。它们是工具,在合理地完成设计之前应该将其忽略。

设计阶段应该比同步机制更抽象。理想情况下,它应该简化操作(或事务,如果您愿意的话)以及它们之间的必要交互。从该模式中,有关如何安排数据和代码以进行并发访问的选择应该是自然的。如果不是,则您的架构不完整。

本文链接:https://www.f2er.com/3111592.html

大家都在问