同步

我先说说同步的概念。
同步的前提是并行,或者同时或者并发。没有并行,不会涉及到同步。有时候,我们把同步看作一个名词而不是动词,那么导致同步的那种动作或者方式叫做同步化。在我这儿,同步或者是名词或者是动词,依赖于上下文。
我举例子来说明同步是什么,然后再说我们如何实现同步。
两个人,A和B,A邀请B去帮他到d地去搬一块大石头,石头很大,一个人搬不动。B同意了。B告诉A说他不知道d地在哪儿,让A领着他去。让A第二天早晨到 B家门口等着B出来,然后一起去。A走路的速率比较高,而B恰恰相反。从B家门口到d地有两个拐弯,用b和c表示罢。为了叙述方便,我把B家门口用a表示。现在总结一下涉及的对象。a,b,c,d四个地点。A,B两个人。A首先到达a地,一直等到B也出现在a地。由于A走的快,所以A先到达b地,然后等待。因为如果不等待B也到达b地,B就到达不了d地了。我们就说:a,b,c,d是A,B的同步点。A和B是两个Actor,如果他们没有同步点,那么他们就没有什么关系。
当然,上面只是一个例子。我们现在要推广一下同步点的概念。从上面的描述看出,同步点是Actor共同到达的点。其实同步点的概念比这个广一些。想象一下接力赛,交换接力棒的地方也是同步点。互斥也是一种同步,它的等待条件就是没有任何别的actor到达。从一个Actor的角度来看,所谓同步点就是一个要等待某些条件满足的那个点。之所以采用同步点的方式而不是时时同步——时时同步可以想象两个恋人压马路,他们总是时时同步 ——是因为:一、时时同步的代价太高,二、时时同步不可能真正实现,所谓的时时同步只是同步点设计的比较致密的同步点同步而已。
再重复一次:同步点就是等待某些条件满足的点。这里的某些条件就是某些actor进入某种状态。
那现在的问题是:怎么个等法?怎么判断某些条件已经满足了?简单直觉的想法就是:不断的查询actor的状态,直到它满足为止。这个等待过程叫做阻塞(Block)。这是几乎所有别的办法的基础。有时候,我们讨厌阻塞,回想一下A和B去搬那块石头,A不断的等B使得A的心情非常郁闷。所以A采用了一个非常聪明的办法,在等待B的时候玩玩手机上的俄罗斯方块。B来到的时候,对着A大叫一声,打断A的游戏,于是又开始走了。当然A可能非常聪明,并不立即停止自己的游戏,尤其是正好到了紧要关头,他让B先等一会儿,等游戏结束了再一起走。或者A并不等着B喊一嗓子,而是玩一会儿,就看看B是不是到了,如果没有再玩一回,如果到了就继续。这个似乎没有喊一嗓子那么好,因为毕竟我们可能看过好多回,而且,经常是对方到了跟前一会儿以后了才发现。不过无论如何,我们把这种等待的方法叫做非阻塞,说穿了就是我并不在这儿傻等,我干会别的活,等到条件满足了,对方通知一下我就行了。有时候,我们把这种方式叫做异步方式。实际上,根据最后是不是等待B的通知,我们可以更细的区分成两种,不等待B通知的那种叫做非阻塞,而等待B通知的那种叫做异步(Note:借自集成电路的两个术语描述这两种方式:电平触发方式和边沿触发方式)。异步方式看起来比非阻塞方式更讨人喜欢一些,跟阻塞方式相比就更讨人喜欢了。
但是,上面的描述都是非计算机术语的,这让人觉得不够安全,觉得很难落实到计算机环境中。毕竟不断地查看B是不是走到跟前了,或者B走到跟前打断A玩游戏,对人来说都不是问题,可是计算机也没有眼睛,也不会大喊一声啊。
首先提一个概念,叫信号灯(或者更计算机化的叫做信号量,Semaphore)。它其实就是actor状态的外在表现。计算机没有眼睛,不能看见是否有人靠近,可是,我们可以让那个人来的时候,修改这个Semaphore的值,如果发现这个值改变了,就证明人已经来了。就像如此:

wait until semaphore is fire;
process ....

while (semaphore != fire)
;
process ....

实际上,有了信号灯这样的东西,各个actor之间就可以进行各种方式的通信了。不过需要注意的是,信号灯对于互相需要同步的actor来说,都要是可以访问的。也就是说,这些actor们都可以读写它。
有了信号灯这个概念,对于同步也就没有什么太多的问题了。但是信号灯是一个非常初级的同步概念,为了实现更复杂的同步,需要付出很多脑力才能设计出比较合用的信号灯通信机制,而且容易出错,所以,人们在信号灯的基础上,开发了很多高级原语,我就不描述了。
信号灯其实是给了actor一个表达自己状态,或者检查别的actor状态的一个机制。有时候我们把信号灯叫做事件或者有更多的名称比如Mutex什么的。
但是刚才有个问题没有深入讨论,那就是打断。还记得B打断A玩俄罗斯方块吧。对于俄罗斯方块,打断也就算了,如果A正在干一些比较重要的事情,这时候被打断了呢?如果没有什么好的处理措施,轻则白做了(早知道白做,还不如不做呢,阻塞着等就行了,毕竟非阻塞还浪费体力一些),重则逻辑错误了,比如:正在做氰化钾试验,结果突然被打断,氰化钾的瓶盖没有盖上,完了,出事了:)。好在计算机不做氰化钾试验,不过它似乎经常打开文件啥的,这个也不好啊。影响后面的动作了。所以,打断的时候,并不是毛手毛脚的去接手新的活,而是把现在的活的现场保留下来,再去干新的活。等到新活处理完了,回过头来继续原来的。
幸好,操作系统已经为我们提供了保存现场,以及以后恢复现场的那种机制了。不过,它并不是慈善家,它的目的也是盈利,所以我们要付出代价才能获得它提供的现场管理的服务。我们不能自己去搞定那些看起来非常自然的打断机制了,我们得缴纳线程税。
现在,按照现实,我提一下现在各种实现同步的现实机制。
低级的就是信号灯,在不同的os中名称各有不同,同时它们的可见范围(是全系统的进程可见?还是进程中的线程可见?)也各不相同。比如Windows系统的 Event,Semaphore,Mutex以及Linux下的高性能的futexes(fast userspace mutexes)。
高级一点的包括:最出名用的最广泛,限制最多,性能最低的是一个叫做select的机制。后来UNIX界发展出来poll机制,改进了select的监听数量,但别的都没有改变。后来有了改进它们的/dev/poll,kqueue,epoll,realtime signal,signal per fd,其中,kqueue以及/dev/poll是level trigger的,kqueue,epoll,realtime signal,signal per fd是edge trigger的。也就是说kqueue可以支持level和edge trigger。当然,还有发展了多少年雷声大雨点小的aio。Windows平台上包括Overlapped IO和IOCP。分别对应于level trigger和edge trigger,不过,IOCP会阻止(拒绝)某些请求,以保证线程数目的常量性。
最后,我们同步的对象也即线程,还有相关的线程调度机制,也在不断地发展也完善中。线程按照实现的方式分为核心级别和用户级别两种,它们的对应得叫做1:1和M:N两种。逻辑上,用户级线程性能高,核心级的线程对于block更容易处理。线程调度的机制现在比较高性能的就是Scheduler Activations模型了,它结合了核心和用户的优点。不过实现的似乎不是很多。顺便说一下,Windows下的线程调度似乎不是很稳定,受到运行时长和线程数目的影响,不知道什么原因。
关于同步,其实大头是各种高级的同步机制,高度的同步模型,但是由于我这是免费的,就不讨论那些了。
【Zotero的使用与同步教程】zotero不同设备同步说明(数据同步、文件同步) 之前尝试了OneDrive等云同步方式,但这些方式依赖于设备的稳定性,很有可能会出现“电脑A更新了文献,由于网速原因没有及时同步到云端,导致电脑B接收不到附件”的问题,更糟糕的情况是,在两台电脑上分别更新了一些数据,同步时发现二者是分开更新的,这样有可能会导致附件混乱,打乱文献库的结构,所以个人更推荐手动更新。storage中的文件只有附件,也就是说完全对应zotero“文件同步”中的内容,采用这种方式,我们可以自己手动保存一系列过去的附件,以防自己不小心删库导致文件全丢的问题。Zotero的附件存储在。 阅读详情

相关推荐

【理论篇】IC间通信的时序模型——系统同步、源同步和自同步

三种用于两个IC间通信的时序模型——系统同步、源同步和自同步。

数字IC/FPGA杂货铺,找一找,或许有你想要的~ 1万+

【整理】数字通信中的同步技术:帧同步、载波同步、位同步

同步的概念 同步技术是数字通信系统中非常重要的技术。一般来说数字通信系统要实现多种同步功能才能实现正确的数据通信任务。其技术目标是实现不同地域收发双方的同步通信互联,实现一致的信息数据交换,因此,通信系统是否能够完全的实现数据的同步交换成为了衡量通信质量的重要因素,如果通信系统没有实现同步,将会导致系统的瘫痪,影响通信的效果。 同步问题在手机、雷达、WLAN、HDTV等都是很重要的。发送信号和接受...

weixin_44052159的博客 3万+

增量同步与全量同步:深入解析数据同步的两种策略

数据同步的方式主要有全量同步和增量同步两种,本文主要介绍上述两种方式的差异,以及如何选择合适的数据同步策略。

oOBubbleX的博客 2590

数据同步之全量同步与增量同步

一、什么是数据同步 业务数据是数据仓库的重要数据来源,我们需要每日定时从业务数据库中抽取数据,传输到数据仓库中,之后再对数据进行分析统计。 为保证统计结果的正确性,需要保证数据仓库中的数据与业务数据库是同步的,离线数仓的计算周期通常为天,所以数据同步周期也通常为天,即每天同步一次即可。 数据的同步策略有全量同步和增量同步。 二、全量同步 全量同步,就是每天都将业务数据库中的全部数据同步一份到数据仓库,这是保证两侧数据同步的最简单的方式...

lslslslslss的博客 2万+

帧同步和状态同步

网络同步主要目的在于保证各个端口的游戏表现一致,而对于大多数游戏,不仅客户端的表现要一致,而且需要客户端和服务端的数据是一致的。所以,同步是一个网络游戏概念,只有网络游戏才需要同步,而单机游戏是不需要同步的。

jkkk_的博客 3245

源同步和系统同步

一、axim_lite模块作用: 将加速器用户侧自定义接口转换为标准的axi协议接口,完成加速器侧多个通道到axi通道的转换。 写操作处理流程: axim查询加速器侧的写命令fifo是否为空,如果非空且axim内部有存储空间,向加速器发出wcmd_read,加速器在WCMD_DLY_CYC个周期后返回wcmd。 axim将wcmd拆分成burst,加速器侧如果有足够的写数据,axim_lite会给加速器端口发出wdata_read,加速器在WDATA_DLY_CYC个周期后返回wdata。根据AXI总线的状

Grady 4525

【网络同步】浅析帧同步和状态同步

谈到网络游戏,不可避免要谈到现有两种比较常见的网游同步技术:帧同步和状态同步 说到这两个名词,大家夸夸奇谈,都能讲上些许自己的见解,我反正啥也不懂 这篇文章就打算着重学习一下这两种技术的基础和原理

weixin_42565127的博客 4577

网络同步——帧同步和状态同步解析

同步就是要多个客户端表现效果是一致的,而且对于大多数的游戏,不仅仅要表现一致,还要客户端和服务器的数据也是一致的。所以同步是个网络游戏概念,只有网络游戏才需要同步,而单机游戏是不需要同步的。帧同步和状态同步是在网络游戏和多人在线应用中常见的两种同步方法,它们用于确保所有参与者看到的游戏状态一致。帧同步概念帧同步是一种同步方式,其中每个客户端都在相同的逻辑帧上执行相同的操作。在这种方式下,游戏状态的更新在固定时间间隔(例如,每秒30帧)内进行。客户端只需发送用户输入,而无需发送整个游戏状态。

weixin_43757333的博客 2328

帧同步与状态同步

1.什么是帧同步? 所有游戏逻辑都在客户端计算,不放在服务器,服务器做什么? 服务器基于帧的概念:|.....|.....|.....|.....|.....|.....| 服务器:每隔一段时间(一帧)向所有客户端发送所有玩家操作,等待玩家操作进来,下一帧再发。 客户端:收到服务器的操作----》计算游戏逻辑---》上报下一帧的操作给服务器。 服务器的帧率设置为多少合适呢?(每秒多少帧,才能保证服务器带宽能承受)---》15FPS ...

u012861978的专栏 8625

【同步】文件同步rsync |自动同步软件FreeFileSync

目录 linux文件同步(手动) 即看即用 详细说明 samba同步(不同主机之间) 详细说明 FreeFileSync 同步文件 1、设置同步源和目标 2、手动同步 3、自动同步 设置同步方向 批处理 其他类似软件 linux文件同步(手动) 即看即用 本地: 表示把本地/data目录下的文件同步到...

小鱼菜鸟的博客 2069

帧同步——状态同步--状态帧同步

帧同步技术通过服务器转发玩家操作指令,让客户端本地计算推进游戏逻辑。其核心是按固定帧间隔(如15FPS)采集和同步操作数据,采用UDP协议传输,并处理丢包、乱序等问题。服务器维护帧ID和操作记录用于同步校验,客户端需严格按顺序处理帧数据。相比状态同步,帧同步实时性更好但易作弊,适合MOBA等少量同步场景。技术要点包括:定点数运算避免浮点误差、UDP传输优化、断线重连机制(补发缺失帧)、以及带宽控制(典型场景约1.2MB/s)。该技术通过确定性模拟保证多客户端表现一致。

unicornnnqz的博客 929

网络同步学习(状态同步,帧同步)

网络同步的学习与实践

zaizai1007的博客 3167

Unity网络同步方案帧同步和状态同步

刚开始我们团队立项的休闲足球游戏,很多人应该都玩过之前的CoolGoal!- Soccer这个游戏,根据手势划线来想办法进球的一个游戏,有点像点球达人(去掉联网的部分)这样一款游戏,后来在老板的兴趣爱好下逐步扩大到多人足球模式,1v1、2v2、3v3、4v4、5v5、6v6等多人匹配模式。后面才有了我们选状态同步和帧同步方案。

类人_猿的博客 2822

网络同步(帧同步和状态同步)

网络同步有3种:帧同步、状态同步、实时广播同步,开发过程中可以混合使用。网络同步的目标就是时刻保证多台机器的游戏表现完全一致。

不负青春 4697

运算放大器测试方法-输入失调电压

由于运放输入回路的不对称性,在输入端将产生一定的误差信号,从而限制运放信号灵敏度。通常用输入失调电压(VOS)、输入失调电流(Ios)和输入偏置电流(IB)表示。运放有四个主要特征:输入失调特征、开环特征、共模特征及输出特征。其放大倍数较大,由于外界的影响,即使运放的输入端产生较小的输入信号,经过放大,在输出端也会产生较大的误差。为能精确测量其性能,一般采用辅助运放进行测试。下面着重讲了运放的主要参数及如何精确测量这些参数。文中DUT代表被测运放,A代表辅助运放。

weixin_46135931的博客 1万+

来!简单了解一下计算机发展史!

​ 1936年,英国数学家阿兰・麦席森・图灵提出了一种抽象的计算模型——图灵机( Turing machine)。图灵机,又称图灵计算机,即将人们使用纸笔进行数学运算的过程进行抽象,由一个虚拟的机器替代人类进行数学运算。​ 图灵机是一个抽象的机器,它有一条无限长的纸带,纸带分成了一个一个的小方格,每个方格有不同的颜色。有一个机器头在纸带上移来移去。机器头有一组内部状态,还有一些固定的程序。

m0_57290404的博客 2907

游戏同步方案——帧同步

游戏同步方案——帧同步帧同步(Lockstep)和状态同步(State Synchronization)状态同步帧同步合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 帧同步(Lockstep)和状态同步(State Synchronizat

黄木木的博客 1万+

优化点列图(RMS半径)的操作数

优化点列图(RMS半径)的操作数

weixin_72050316的博客 2259

同步 实现同步的三种方式

/** * 多线程共享数据:多个线程有可能同时处理同一个资源 * 同步:多个线程在同一时间段内只能有一个线程执行指定代码,其它线程要等此线程执行完成之后才可以继续执行 */ /** * 1.多线程共享数据时会发生线程不安全的情况 * 2.多线程共享数据必须使用同步 * 3.实现同步的三种方式: * 1)同步代码块 * synchronized(要同步的对...

zs1342084776的博客 1万+

用R来做一个临床研究亚组分析的森林图

在编程语言里R语言最强大的功能是做图功能,我们知道在做Meta分析的时候会需要做森林图,实际上我们在很多临床研究中也经常看到森林图,主要是亚组分析的森林图,比如下面这篇文章里的一个森林图: 今天就教教大家怎么用R语言来做上面这种亚组分析的森林图 1. 在Excel里编辑好数据,按照下面的格式整理,保存为csv格式 2. 下载安装R跟Rstudio R软件的下载地址: https://mirrors.tuna.tsinghua.edu.cn/CRAN/ Rstudio下

Mrrunsen的博客 5340

MIKE水动力笔记3_岸线及水深数据之根据遥感影像绘制岸线的方法

通过遥感影像自己绘制岸线来制作岸线数据,这种方法获取的岸线及水深数据精度很高,且可以根据自己的研究需要进行灵活处理。

晏长街的博客 1万+

帧同步,帧同步是什么意思

帧同步,帧同步是什么意思 在数字通信时,一般总是以一定数目的码元组成一个个的“字”或“句”,即组成一个个的“群”进行传输的。因此,群同步信号的频率很容易由位同步信号经分频而得出。但是,每个群的开头和末尾时刻却无法由分频器的输出决定。群同步的任务就是在位同步信息的基础上,识别出数字信息群(“字”或“句”)的起止时刻,或者说给出每个群的“开头”和“末尾”时刻。 群同步有时也称为帧同步。为了实现群同步,...

wfz_579的博客 8489

当启动容器的时候提示:exec format error?如何解决问题

Docker容器出现"exec format error"的主要原因是架构不兼容(如ARM设备运行x86镜像)。解决方案包括:1)匹配镜像与宿主机架构;2)构建时指定平台;3)安装QEMU模拟器;4)修复文件权限和格式;5)验证基础镜像兼容性。排查流程应从检查架构匹配开始,逐步验证权限、解释器和换行符等问题。建议优先使用多架构镜像,构建时明确指定平台,并使用buildx工具生成多平台镜像。调试时可进入容器手动验证文件格式和兼容性。

weixin_39291964的博客 2720

状态同步和帧同步

一、同步 同步就是要多个客户端表现效果是一致的,而且对于大多数的游戏,不仅仅要表现一致,还要客户端和服务器的数据也是一致的。所以同步是个网络游戏概念,只有网络游戏才需要同步,而单机游戏是不需要同步的。 二、帧同步 帧同步的代表作当属当下最火的手游王者荣耀了吧,它就是帧同步完成的,也意味着它的核心的战斗逻辑写在客户端。帧同步经常被采用在RTS游戏(Real-Time Strategy)中。在游戏中,又客户端给服务器上传玩家的指令,服务器收到指令之后不做任何操作然后转发给...

choudan8888的博客 6213

【推荐系统】推荐算法:冷启动-召回-粗排-精排-重排 解读

【推荐系统】推荐算法:冷启动-召回-粗排-精排-重排 解读

Danger的博客 3761

杰理可视化SDK开发-杰理AC1123N芯片SDK开发笔记合集

该文档主要描述 AC112N开发相关的使用说明和注意事项,收集并持续更新开发调试过程中的相关疑问和解答,对SDK介绍文档做一个补充说明。写作人:李永奉,参考项目MD-026H; AC112N-SDK项目帮助文档在杰理开发者平台(JL DP)'帮助'处进入,如本文档有与后续帮助文档或工具注释说明冲突,以后者为标准。

李永奉的博客 183
上一篇: 线程池的传说
下一篇: 原子性
lifeNet
博客等级 码龄20年 1粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值