同步是一种计算机术语,一般指的是在两个或多个数据库、文件、模块、
线程之间用来保持数据内容一致性的
机制。
数据库同步有两种实现方式。第一种是根据数据库的日志,将一个数据库的修改应用到另一个数据库。这种方式适合同一种数据库,并且数据结构完全相同的情况。如果要把这种同步方式应用到不同类型的数据库,或者数据库中数据类型不同,都会遇到困难。第二种实现方式是分析两个数据库中内容,找出差异,将差异的部分记录写入对方数据库中。这种方式对数据类型没有严格要求,因为数据从一个数据库调出,写入另一数据库之前,可以做适当的
类型转换。如果使用ODBC接口访问数据库,这种实现同步的方式还可以适用于各种异类数据库之间的同步。
需要同步的文件夹可以是同一台计算机上,也可以是在不同计算机上,甚至是异地的。如果要同步的文件夹在同一台计算机上,则属于单机文件同步,如果要同步的文件夹在不同的计算机上,就是远程文件同步了。同步处理时,扫描分析双方文件夹中的文件,然后进行对比找出有修改或增加或缺少的文件,按需要进行文件传送或删除多余文件,最终使文件夹内容保持一致,或者按需要部分保持一致。
在
计算机网络中,“同步”的意思很广泛,它没有一个简单的定义。在很多地方都用到“同步”的概念。例如在协议的定义中,协议的三个要素之一就是“同步”。在
网络通信编程中常提到的“同步”,则主要指某函数的执行方式,即
函数调用者需
等待函数执行完成后才能进到下一步。在
数据通信中的
同步通信则是与
异步通信有很大的区别。
“
同步通信”的通信双方必须先建立同步,即双方的时钟要调整到同一个频率。收发双方不停地发送和接收连续的同步比特流。但这时还有两种不同的同步方式。一种是使用全网同步,用一个非常精确的主时钟对全网所有结点上的时钟进行同步。另一种是使用准同步,各结点的时钟之间允许有微小的误差,然后采用其他措施实现
同步传输。
“异步通信”是一种很常用的通信方式。异步通信在发送字符时,所发送的字符之间的时间间隔可以是任意的。当然,接收端必须时刻做好接收的准备(如果接收端主机的电源都没有加上,那么发送端发送字符就没有意义,因为接收端根本无法接收)。发送端可以在任意时刻开始发送字符,因此必须在每一个字符的开始和结束的地方加上标志,即加上开始位和停止位,以便使接收端能够正确地将每一个字符接收下来。异步通信的好处是通信设备简单、便宜,但
传输效率较低(因为开始位和停止位的开销所占比例较大)。
异步通信也可以是以帧作为发送的单位。接收端必须随时做好接收帧的准备。这时,帧的首部必须设有一些特殊的比特组合,使得接收端能够找出一帧的开始。这也称为
帧定界。帧定界还包含确定帧的结束位置。这有两种方法。一种是在帧的尾部设有某种特殊的比特组合来标志帧的结束。或者在帧首部中设有帧长度的字段。需要注意的是,在
异步发送帧时,并不是说发送端对帧中的每一个字符都必须加上开始位和停止位后再发送出去,而是说,发送端可以在任意时间发送一个帧,而帧与帧之间的时间间隔也可以是任意的。在一帧中的所有比特是连续发送的。发送端不需要在发送一帧之前和接收端进行协调(不需要先进行
比特同步)。
线程同步解决的是在一个程序中多个线程之间的关系的协调,对竞争资源的访问的一种处理方式,避免一个线程长期占用一个资源的目的。有synchronized,lock ,volatile,消息传递机制等处理方式达到线程同步。比如在java中使用synchronized关键字修饰一个方法,用这个关键字修饰的方法称为“同步方法”,语法:访问控制符 +synchronized + 返回值类型(参数列表) +方法体;具有这个关键字的方法有一个重要的特性,就是该方法每次只能有一个线程执行这个方法;后来的线程处于挂起状态,直到前面的调用该方法的线程退出该方法,才能调用该方法体执行。