在当今世界,许多计算机,移动设备或Web服务共享数据或充当集线器,同步变得更加重要.众所周知,同步的解决方案并不是最舒适的解决方案,最好不要同步.
我仍然很好奇你将如何实现同步解决方案以在多个实体之间进行同步.已经存在许多不同的方法,例如比较更改的日期字段或散列并使用最新数据或让用户在冲突的情况下选择他想要使用的内容.另一种方法是尝试自动合并冲突的数据(在我看来,这并不是那么聪明,因为机器无法猜出用户的意思).
无论如何,在开始实现同步之前,我们应该回答几个与同步有关的问题:
还有很多其他问题,我希望我能够激励你.同步是一个相当普遍的问题.一旦找到了一个好的,多功能的同步方法,它应该更容易应用于具体的应用程序,而不是从头开始思考.我意识到已经有很多应用程序尝试解决(或成功解决)同步,但它们已经相当具体,并且通常不能给出足够的同步方法答案.
在 C++ 中,有一种原子类型std::atomic<T>
。该原子类型可能是无锁的,也可能不是,具体取决于类型 T 和当前平台。如果某个类型的无锁实现在类型 T 的平台上可用,那么大多数编译器都会提供无锁atomic<T>
。在这种情况下,即使我想要非无锁atomic<T>
我也无法拥有它。
C++ 标准决定只保留一个,std::atomic<T>
而不是一std::atomic<T>
加一std::lock_free<T>
(部分针对特定类型实现)。这是否意味着“在任何情况下,当后者可用时,使用非无锁原子类型都会比使用无锁原子类型更好”?(主要是在性能方面而不是易用性方面)。
我试图找出我的同步("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结果取决于从前一个取得的结果.
synchronized
在Java
保证线程的安全性.怎么样C++
?
谢谢!
我的代码需要一些帮助.我是nodejs的新手,并且遇到很多麻烦.我想做什么:
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
我有一个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
我正在创建一个客户端/服务器音频系统,它可以通过网络任意传输音频.一个中央服务器泵出音频流,x个客户端接收音频数据并播放它.到目前为止还没有任何魔法需要,我甚至可以将这个场景与开箱即用的VLC媒体播放器配合使用.
然而,棘手的部分似乎是同步音频回放,以便所有客户端都处于可听同步状态(只要感知到人类听众同步,就可以允许实际等待时间).
我的问题是,是否有任何已知的方法或算法用于此类同步问题(视频可能以相同的方式解决).我最初的想法围绕在物理机器之间同步时钟,从而创建一个虚拟的"主计时器",并以某种方式对齐音频数据包.
有些产品已经解决了这个问题(但对我的整体用例来说仍然不够):
任何指针都是最受欢迎的.谢谢.
PS:这个相关的问题似乎很久以前就已经死了.
在维基百科条目没有给出细节和RFC是太密集.这里有人知道NTP是如何工作的吗?
我正在寻找一个概述,解释如何使用Marzullo的算法(或其修改)将服务器上的时间戳转换为客户端上的时间戳.具体而言,使用什么机制来产生准确度,该准确度平均在10ms内,当通过具有高度可变等待时间的网络进行通信时,这通常是数倍.
您是否知道同步两个数据库的任何应用程序 - 在开发期间,有时需要添加一个或两个表行或新表或列.通常我会在某个文件中编写每个sql语句,并且在上传路径中,我会在生产数据库中执行这些行(之前备份它).我使用mySQL和postreSQL数据库.
您的实践是什么,以及哪些应用可以帮助您.