RPC框架,同步的和异步的有什么区别?

RPC框架,同步的和异步的有什么区别?,第1张

所谓的同步电机,就是电枢绕组的磁场旋转速度答前与转子旋转方向一致,转速相同。这样的电机一般为如下结构:转子上有绕组,是集中式的励磁绕组转子上无绕组,而采用永磁体结构转子上无绕组,无永磁体,有齿和槽。定子上有分布式绕组。采用这样的结构主要是可以把滑环和电刷的数量降到最低,这样的电机又叫转场式电机。也有为某种特殊要求,而把励磁绕组放在定子上的结构,这样的结构一般称为转枢式(如家用吊扇)。异步电机与同步电机其实有一个很大的工作原理上的区别:同步电机的工作是靠“磁场总是沿着磁路最短的方向上走”,以转袜乱场失电机为例。在转子上有了励磁后,出现了N和S极然后定子磁场旋转,其N,S极的相互变化,总是与转子上的磁极一一对应。所以形成了同步告举档。更重要的是,定、转子的磁极数必须相同,否则电机是不能运转的。而异步电动机是靠感应来实现运动的。原理是,在定子绕组加三相电压后,会形成旋转磁场,转子上的导条因切割磁力线,所以产生了电势又由于导条是连通的,所以就产生了电流。此时,我们就想到了初中时学的---“带电导体在磁场中会产生运动”。所以,这样的电动机才叫“感应电机”。对于异步或感应电机来讲,其转子的极数是自动感应定子极数的。也可以讲,转子是没有极数的。(以上是以电枢绕组在定子上做例的)。异步电机没有转枢/转场之说。

如果用 VC 可以利宽樱用慎孙丛 _InterlockedExchange 编译器内建函数: #ifndef _SPINLOCK_H_#define _SPINLOCK_H_#include <intrin.h>#include <Windows.h>class SpinLock {public:// Typetypedef long LOCKTYPE typedef void (*FuncYieldSched)() enum SPIN_LOCK_STATUS {UNLOCKED = 0, // UNLOCKED MUST be 0, to cause _InterlockedExchange() in Lock() turn falseLOCKED = 1}// ctor// autoLock:/凯弯/ To hold lock in ctor, specify autoLock = TRUE,// OR specify autoLock = FALSE, and hold lock later using Lock().//// lockSlot:// To use private lock variable (m_Lock), specify lockSlot = NULL,// OR specify lockSlot a valid address to use external lock variable.SpinLock(LOCKTYPE* lockSlot = NULL,BOOL autoLock = TRUE,FuncYieldSched funcYieldSched = DefaultYieldSched) : m_Lock(UNLOCKED), m_funcYieldSched(funcYieldSched) {if (lockSlot == NULL)m_pLockSlot = &m_Lock elsem_pLockSlot = lockSlot if (autoLock)Lock() }// dtor~SpinLock() {Unlock() }// Operation// default yield schedule functionstatic void DefaultYieldSched() {Sleep(0) }void Lock() {// spin circlewhile (_InterlockedExchange(m_pLockSlot, LOCKED))m_funcYieldSched() }void Unlock() {_InterlockedExchange(m_pLockSlot, UNLOCKED) }private:LOCKTYPEm_Lock// private lock in mutex wayLOCKTYPE* m_pLockSlot // the lock slot in useFuncYieldSched m_funcYieldSched // yield schedule function}#endif // _SPINLOCK_H_

什么是DataX

DataX 是阿里巴巴开源的一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。

方法/步骤

DataX的设计

为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步。

框架设计

DataX本身作为离线数据同步框架,采用Framework + plugin架构构建。将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。

Reader:数据采集模块,负责采集数据源的数据,将数据发送给Framework。

Writer:数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。

Framework:用于连接晌厅reader和writer,作为两者的数据传输通道,并处理缓冲,流控,并发,悔侍数据转换等核心技术问题。

运行原理

① DataX完成单个数据同步的作业,我们称之为Job,DataX接受到一个Job之后,将启动一个进程来完成整个作业同步过程。DataX Job模块是单个作业的中枢管理节点,承担了数据清理、子任务切分(将单一作业计算转化为多个子Task)、TaskGroup管理等功能。

②DataXJob启动后,会根据不同的源端切分策略,将Job切分成多个小的Task(子任务),以便于并发执行。Task便是DataX作业的最小单元,每一个Task都会负责一部分数据的同步工作。

③切分多个Task之后,DataX Job会调用Scheduler模块,根据配置的并发数据量,将拆分成的Task重新组合,组装成TaskGroup(任务组)。每一个TaskGroup负责以一定的并发运行完毕分配好的所宴前隐有Task,默认单个任务组的并发数量为5。

④每一个Task都由TaskGroup负责启动,Task启动后,会固定启动Reader—>Channel—>Writer的线程来完成任务同步工作。

⑤DataX作业运行起来之后, Job监控并等待多个TaskGroup模块任务完成,等待所有TaskGroup任务完成后Job成功退出。否则,异常退出,进程退出值非0


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12192466.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存