标签: synchronization

在多个实体之间同步数据最聪明,最简单的方法是什么?

在当今世界,许多计算机,移动设备或Web服务共享数据或充当集线器,同步变得更加重要.众所周知,同步的解决方案并不是最舒适的解决方案,最好不要同步.

我仍然很好奇你将如何实现同步解决方案以在多个实体之间进行同步.已经存在许多不同的方法,例如比较更改的日期字段或散列并使用最新数据或让用户在冲突的情况下选择他想要使用的内容.另一种方法是尝试自动合并冲突的数据(在我看来,这并不是那么聪明,因为机器无法猜出用户的意思).

无论如何,在开始实现同步之前,我们应该回答几个与同步有关的问题:

  • 最新数据是什么?我该如何表示呢?
  • 如果发生冲突,我该怎么办?合并?我是否提示并询问用户该怎么做?
  • 当我进入不一致状态(例如由于移动网络连接断开而断开连接)时,我该怎么办?
  • 当我不想进入不一致状态时,我该怎么办?
  • 如何恢复被中断的当前同步?
  • 我如何处理数据存储(例如,Web服务上的MySQL数据库,iPhone上的Core Data;以及如何在没有大量胶水代码的情况下合并/同步数据)?
  • 如何处理同步期间发生的用户编辑(在后台运行,因此UI不被阻止)?
  • 如何以及在哪个方向传播更改(例如,用户在其计算机上创建"Foo"条目并且不同步;然后他在旅途中创建另一个"Foo"条目;当他尝试同步两个设备时会发生什么)?用户是否会有两个具有不同唯一ID的"Foo"条目?用户是否只有一个条目,但是哪个条目?
  • 当我有分层数据时,我该如何处理同步?自顶向下?自下而上?我是否以原子方式处理每个条目,还是仅查看超级节点?在过度简化事物和投入太多时间进行实施之间进行权衡有多大?
  • ...

还有很多其他问题,我希望我能够激励你.同步是一个相当普遍的问题.一旦找到了一个好的,多功能的同步方法,它应该更容易应用于具体的应用程序,而不是从头开始思考.我意识到已经有很多应用程序尝试解决(或成功解决)同步,但它们已经相当具体,并且通常不能给出足够的同步方法答案.

database algorithm mobile synchronization

45
推荐指数
2
解决办法
1万
查看次数

无锁算法真的比锁定完全算法表现更好吗?

Raymond Chen一直在做一个关于无算法大型 系列 .除了函数的简单情况之外,似乎所有这些的主流模式是它们实现自己的锁.当然,没有处理器锁,但是在每个CPU上反复循环以确保一致性的概念非常类似于自旋锁.作为一个自旋锁,它们的效率将低于操作系统附带的一般锁,因为它们在等待其他线程时不会控制其量子.因此,每当有人来找我并说"但我的算法是无锁的"时,我的一般反应是"如此"? InterlockedXxx

我很好奇 - 是否有可用的基准测试显示无锁算法比其完全锁定的算法有优势?

multithreading synchronization lock-free

45
推荐指数
5
解决办法
9064
查看次数

无锁同步总是优于使用锁的同步吗?

在 C++ 中,有一种原子类型std::atomic<T>。该原子类型可能是无锁的,也可能不是,具体取决于类型 T 和当前平台。如果某个类型的无锁实现在类型 T 的平台上可用,那么大多数编译器都会提供无锁atomic<T>。在这种情况下,即使我想要非无锁atomic<T>我也无法拥有它。

C++ 标准决定只保留一个,std::atomic<T>而不是一std::atomic<T>加一std::lock_free<T>(部分针对特定类型实现)。这是否意味着“在任何情况下,当后者可用时,使用非无锁原子类型都会比使用无锁原子类型更好”?(主要是在性能方面而不是易用性方面)。

c++ synchronization lock-free stdatomic

45
推荐指数
4
解决办法
8227
查看次数

跳过同步("Cache_Group")部分,为什么会这样?

我试图找出我的同步("Group_Name")被跳过,如果我尝试通过它同步不同的值,为什么会这样.

请考虑以下问题.

我有一个名为"Group1"的SyncGroup,其中我有一个名为"MBOGroup1"的MBO,其中我有"name","password","codeCheck"属性.我获取数据并提取属性为"releaseCode"

现在我有另一个名为"GroupSub1"的SyncGroup,其中我有一个名为"MBOSubGroup1"的MBO,我在其中传递属性"releaseCode",我得到了一些结果.

条件如下

如果我为"MBOGroup1"获取多行,我为"GroupSub1"设置了一个for循环,并将每个"releaseCode"数据传递给"GroupSub1"并提取结果

大多数情况下会发生一些releaseCode被跳过而我得到的错误"结果"为"GroupSub1"为什么会这样?是因为for循环执行速度比synchronize()字或其他类似CacheGroup策略更快,因为OnDemand和时间为10秒

请帮助.

因为有些数据我需要放置4个以上的循环,我的未来syncGroup结果取决于从前一个取得的结果.

android synchronization

44
推荐指数
1
解决办法
317
查看次数

什么是在java中同步的correspoding功能?

synchronizedJava保证线程的安全性.怎么样C++

谢谢!

c++ java multithreading synchronization

43
推荐指数
3
解决办法
2万
查看次数

fs.writeFile在promise,异步同步的东西中

我的代码需要一些帮助.我是nodejs的新手,并且遇到很多麻烦.我想做什么:

  • 1)使用亚马逊产品(ASIN)获取.txt
  • 2)使用amazon-product-api包获取所有产品

  • 3)将每个产品保存在.json文件中

我的代码不起作用.我想我搞砸了这个异步同步的东西 - 帮助我!

var amazon = require('amazon-product-api');
var fs = require('fs');

var client = amazon.createClient({
    awsId: "XXX",
    awsSecret: "XXX",
    awsTag: "888"
});

var array = fs.readFileSync('./test.txt').toString().split('\n');
for (var i = 1; i < array.length; i++) {
     var ASIN = array[i];

    return client.itemLookup({
            domain: 'webservices.amazon.de',
            responseGroup: 'Large',
            idType: 'ASIN',
            itemId: ASIN
        })
        .then(function(results) {
            fs.writeFile(ASIN + '.json', JSON.stringify(results), function(err) {
                if (err) {
                    console.log(err);
                } else {
                    console.log("JSON saved");
                }
            })

            return results;

        }).catch(function(err) { …
Run Code Online (Sandbox Code Playgroud)

synchronization amazon asynchronous node.js amazon-product-api

43
推荐指数
8
解决办法
6万
查看次数

在Java中同步String对象

我有一个webapp,我正在进行一些负载/性能测试,特别是在我们希望有几百个用户访问同一页面并在此页面上每10秒点击一次刷新的功能.我们发现我们可以使用此功能进行改进的一个方面是在一段时间内缓存来自Web服务的响应,因为数据没有变化.

在实现这个基本缓存之后,在一些进一步的测试中,我发现我没有考虑并发线程如何同时访问Cache.我发现在大约100毫秒内,大约有50个线程试图从缓存中获取对象,发现它已经过期,命中Web服务以获取数据,然后将对象放回缓存中.

原始代码看起来像这样:

private SomeData[] getSomeDataByEmail(WebServiceInterface service, String email) {

  final String key = "Data-" + email;
  SomeData[] data = (SomeData[]) StaticCache.get(key);

  if (data == null) {
      data = service.getSomeDataForEmail(email);

      StaticCache.set(key, data, CACHE_TIME);
  }
  else {
      logger.debug("getSomeDataForEmail: using cached object");
  }

  return data;
}
Run Code Online (Sandbox Code Playgroud)

因此,为了确保在对象key过期时只有一个线程正在调用Web服务,我认为我需要同步Cache get/set操作,并且似乎使用缓存键是一个很好的候选对象同步(这样,对电子邮件b@b.com的此方法的调用不会被方法调用a@a.com阻止).

我将方法更新为如下所示:

private SomeData[] getSomeDataByEmail(WebServiceInterface service, String email) {


  SomeData[] data = null;
  final String key = "Data-" + email;

  synchronized(key) {      
    data =(SomeData[]) StaticCache.get(key);

    if (data == null) {
        data = service.getSomeDataForEmail(email); …
Run Code Online (Sandbox Code Playgroud)

java multithreading synchronization synchronized thread-safety

42
推荐指数
6
解决办法
4万
查看次数

通过网络同步音频

我正在创建一个客户端/服务器音频系统,它可以通过网络任意传输音频.一个中央服务器泵出音频流,x个客户端接收音频数据并播放它.到目前为止还没有任何魔法需要,我甚至可以将这个场景与开箱即用的VLC媒体播放器配合使用.

然而,棘手的部分似乎是同步音频回放,以便所有客户端都处于可听同步状态(只要感知到人类听众同步,就可以允许实际等待时间).

我的问题是,是否有任何已知的方法或算法用于此类同步问题(视频可能以相同的方式解决).我最初的想法围绕在物理机器之间同步时钟,从而创建一个虚拟的"主计时器",并以某种方式对齐音频数据包.

有些产品已经解决了这个问题(但对我的整体用例来说仍然不够):

http://www.sonos.com

http://netchorus.com/

任何指针都是最受欢迎的.谢谢.

PS:这个相关的问题似乎很久以前就已经死了.

algorithm audio streaming synchronization

42
推荐指数
4
解决办法
2万
查看次数

网络时间协议如何工作?

维基百科条目没有给出细节和RFC是太密集.这里有人知道NTP是如何工作的吗?

我正在寻找一个概述,解释如何使用Marzullo的算法(或其修改)将服务器上的时间戳转换为客户端上的时间戳.具体而言,使用什么机制来产生准确度,该准确度平均在10ms内,当通过具有高度可变等待时间的网络进行通信时,这通常是数倍.

time synchronization ntp

41
推荐指数
2
解决办法
2万
查看次数

如何同步开发和生产数据库

您是否知道同步两个数据库的任何应用程序 - 在开发期间,有时需要添加一个或两个表行或新表或列.通常我会在某个文件中编写每个sql语句,并且在上传路径中,我会在生产数据库中执行这些行(之前备份它).我使用mySQL和postreSQL数据库.

您的实践是什么,以及哪些应用可以帮助您.

mysql synchronization

40
推荐指数
4
解决办法
2万
查看次数