问题标签 [shared-state]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
240 浏览

java - 在 Java EE 服务器之间共享数据

哪些产品/项目可以帮助我应对以下情况?

  • 多于一台服务器(同一位置)
  • 某些状态应该在服务器之间共享(例如,如果计划任务正在运行以及在哪个服务器上运行的信息)。

显而易见的答案当然可能是数据库,但我们正在使用 Seam,而且似乎没有一种将事务嵌套在 Seam-bean 中的好方法,所以我需要找到一种方法,让我不必为配置而疯狂(尝试使用 EJB:s 但persistence.xml 之后并不漂亮)。所以我需要另一种方法来解决这个问题,直到 Seam 支持嵌套事务。

如果您需要更多详细信息,这与我的情况基本相同:https ://community.jboss.org/thread/182126 。

有任何想法吗?

0 投票
2 回答
19226 浏览

python - 如何在 Python 中使用 Managers() 在多个进程之间共享字符串?

我需要从主进程中读取由 multiprocessing.Process 实例编写的字符串。我已经使用管理器和队列将参数传递给进程,因此使用管理器似乎很明显,但管理器不支持字符串

Manager() 返回的管理器将支持类型 list、dict、Namespace、Lock、RLock、Semaphore、BoundedSemaphore、Condition、Event、Queue、Value 和 Array。

如何使用多处理模块中的管理器共享由字符串表示的状态?

0 投票
1 回答
2646 浏览

python - 使用 Python 的 multiprocessing.pool.map 来操作相同的整数

问题

我正在使用 Python 的多处理模块来异步执行函数。我想要做的是能够在每个进程调用和执行时跟踪我的脚本的整体进度def add_print。例如,我希望下面的代码在每次进程运行该函数时添加 1total并打印出值 ( )。1 2 3 ... 18 19 20我的第一次尝试是使用全局变量,但这不起作用。由于该函数是异步调用的,因此每个进程读取total为 0 开始,并独立于其他进程添加 1。所以输出是 201而不是递增值。

即使函数异步运行,我如何才能以同步方式从映射函数中引用同一块内存?我的一个想法是以某种方式缓存total在内存中,然后在我添加到total. 这是python中一种可能且基本合理的方法吗?

如果您需要更多信息,或者我解释得不够好,请告诉我。

谢谢!


代码

0 投票
1 回答
97 浏览

multithreading - Is Calling the `Wait()` method of `sync.Cond` Concurrently, Safe?

Is calling the Wait() method of sync.Cond safe when according to the documentation, it performs an Unlock() first?

Assume we are checking for a condition to be met:

And:

Since Wait() performs an Unlock, should (A) has a locking of it's own? Or being atomic?

0 投票
1 回答
688 浏览

distributed-computing - CRDT 和 RAFT 协议之间是否存在关系——或者它们是正交的?

以多人网络游戏的用例为例。您会立即遇到跨网络复制和协调共享状态的问题。

针对这个问题的方面似乎有多种工具,特别是两个似乎重叠:

  1. 无冲突复制数据类型(CRDT) - 用于
  2. RAFT 共识算法- 用于在分布式网络中选择交易领导者以帮助达成共识。

我的问题是:CRDT 和 RAFT 协议之间是否存在关系——或者它们是正交的?

0 投票
2 回答
239 浏览

cross-platform - 如何在程序之间共享状态?

我有 2 个程序必须相互通信。他们应该共享状态(变量、文件——我不知道如何实现)。一个程序应该读取它并对更改做出反应——另一个程序应该写入这个全局状态。

为此目的使用文件甚至不慢,很难读取某人同时写入的文件。

在程序之间实现这种共享状态的最佳方法是什么?(寻找跨平台解决方案)

0 投票
1 回答
360 浏览

websocket - 多对多流共享状态的设计模式

我正在编写一个有趣的在线白板应用程序,多个用户查看同一个白板并可以在上面绘图。我正在使用 websockets(前端的 vanilla JS,后端的 Scala),现在基本上只是从一个用户向其他用户广播鼠标事件,并在客户端渲染图像。

但是,这会导致暂时的共享状态,而我希望用户能够随时跳上并查看保留的共享状态。我认为这可能需要在后端和前端共享渲染代码,以便客户端在流式传输时渲染事件,但服务器可以在客户端关联时发送原始图像数据。

所以我的问题是:对于这种项目,我应该注意哪些其他设计模式?这是一个娱乐/学习项目,所以这是一个开放式问题,但我会接受一个包含此类数据流的一些有用参考的答案。

0 投票
1 回答
263 浏览

multithreading - 持有互斥锁时调用 pthread_create 是否安全?

假设我有代码在访问某些共享状态时持有互斥锁。在某些时候,我确定我需要创建一个新线程,因此调用 pthread_create,同时仍然持有互斥锁。这被认为是安全的吗?

假设我的共享状态是一个全局计数器,它跟踪成功创建的 pthread 的数量,另一个线程使用这个计数器在屏幕上实时显示信息。此外,我不希望 pthread 的数量大于某个最大值(例如 10 表示确定性)。

假设计数器当前为 9。如果我增加计数器,然后在调用 pthread_create 之前释放互斥锁,则 pthread_create 可能会失败,然后计数器错误地显示比我实际成功创建的线程数(10)更多( 9)。

另一方面,如果我首先释放互斥锁,然后调用 pthread_create,然后如果调用成功,则重新获取互斥锁以递增计数器,然后在释放互斥锁和从 pthread_create 返回之间,另一个线程也可能调用 pthread_create并增加计数器(到 10)。因此,我将创建第 11 个 pthread,计数器变为 11。但我应该创建的 pthread 不超过 10 个。

因此,保证共享状态一致性的唯一方法似乎是在调用 pthread_create 时保持互斥锁。但我知道,一般来说,一个人不应该在持有互斥锁的同时调用未知代码,所以我不知道在这种情况下可以做什么。

编辑:这是一些会出现此问题的示例代码

0 投票
1 回答
27 浏览

android - Android + CustomView:在等待网络响应时共享自定义视图的状态

我有下一个场景:

  • 一个活动有 2 个片段。
  • 每个片段都有一个自定义视图(相同但不同的实例)。
  • 一个片段算法调用 DialogFragment 来模拟视图大小增加到全屏,因此它具有另一个相同的自定义视图。

当您单击任何自定义视图时,它会发出网络请求并等待(使用微调器)直到响应完成。我的问题是我想“共享”视图的状态,所以当您单击任何自定义视图时,您会在三个视图中看到微调器,它们都会等待响应,当响应到达时所有这些都将删除每个微调器并让自定义视图再次可访问。

0 投票
1 回答
292 浏览

haskell - 使用 IO 时如何在 Haskell 中的两个函数调用之间共享 IORef 状态?

我正在尝试学习 Haskell,并且正在尝试使用 IORef 来保存和查找记录。我的代码看起来像这样(请注意,我在此示例中选择“String”作为 IORef 类型只是为了方便和简洁,在我的实际代码中我使用的是记录。并且还忽略了我使用的是 Set 代替的地图,我会改变它):

我想要实现的是在两个函数调用之间共享状态(Set),以便findStringInState可以返回String我刚刚插入到 Set 中的状态。但是当我运行这个doStuff函数时,我得到了这个:

我可能误解了一些东西,因为我认为 IORef 确实应该是我的状态的容器。

  1. 为什么这不起作用?
  2. 我该怎么做才能让它发挥作用?