RAC笔记

【Oracle】Oracle RAC集群体系结构完美解析 Cluster Ready Services,简称 CRS,是 oracle 开发的一个集群软件,与其它集群软件类似,CRS 主要完成集群成员管理、心跳监控、故障切换等功能,CRS 要求每个集群节点的操作系统必须相同,这样,通过 CRS 将多个节点的操作系统绑定到了一起,客户端对集群的访问,就像访问一台服务器一样。CRS 主要有两个集群套件组成,分别是 voting disk 和 Oracle Cluster Registry。 阅读详情
//signal1,signal2有任何一个被订阅,即x等于一个RACTuple
RACSignal *signal1 = [ RACSignal defer :^ RACSignal *{
        NSLog ( @"aaaa" );
       
return [ RACSignal return : @"hello111" ];
    }];
   
   
RACSignal *signal2 = [ RACSignal defer :^ RACSignal *{
       
NSLog ( @"bbbb" );
       
return [ RACSignal return : @"hello222" ];
    }];
RACSignal *signal3 =[ RACSignal combineLatest : @[ signal1,signal2 ] ];
    [signal3 subscribeNext :^( id x) {
       
NSLog ( @"x = %@" ,x);
    }];

//先处理signal2 再处理signal1 ,当两个信号都sendNext后,signal3才会触发
- ( RACSignal *)zipWith:( RACSignal *)signal
    RACSignal *signal1 = [ RACSignal defer :^ RACSignal *{
       
NSLog ( @"aaaa" );
       
return [ RACSignal return : @"hello111" ];
    }];
   
   
RACSignal *signal2 = [ RACSignal createSignal :^ RACDisposable *( id < RACSubscriber > subscriber) {
       
NSLog ( @"bbbbb" );
        [subscriber
sendNext : @"asdfasdf" ];
        [subscriber
sendCompleted ];
       
return nil ;
    }];
   
   
RACSignal *signal3 = [signal2 zipWith :[signal1 logAll ]];
   
    [signal3
subscribeNext :^( id x) {
       
NSLog ( @"asdfasdf" );
    }
completed :^{
       
NSLog ( @"asdfasdfsdf" );
    }];
// RACSignal combineLatest :与 zipWith :实际上结果是一样的.都是等到所有的signal被sendNext后,才会触发


//concat
RACSignal *signal3 = [signal2 concat :[signal1 logAll ]];
/// Subscribes to `signal` when the source signal completes.
- (RACSignal *)concat:(RACSignal *)signal;
当signal2 被sendCompleted后,就去订阅signal1

    RACSignal *signal1 = [ RACSignal defer :^ RACSignal *{
       
NSLog ( @"print signal1" );
       
return [ RACSignal return : @"signal1" ];
    }];
   
   
RACSignal *signal2 = [ RACSignal defer :^ RACSignal *{
       
NSLog ( @"print signal2" );
       
return [ RACSignal return : @"signal2" ];
    }];
   
   
RACSignal *signal3 = [signal1 concat :signal2];
    [signal3
subscribeNext :^( id x) {
       
NSLog ( @"%@" ,x);
    }];

2015-06-03 13:23:00.381 DemoCategorizer[21572:2556481] print signal1
2015-06-03 13:23:07.385 DemoCategorizer[21572:2556481] signal1
2015-06-03 13:23:07.385 DemoCategorizer[21572:2556481] print signal2
2015-06-03 13:23:16.748 DemoCategorizer[21572:2556481] signal2

//skip
skip:( NSUInteger )skipCount
//跳过第 skipCount 个sendNext,从后面取
RAC ( self .secCodeImageView,image) = [[ RACObserve ( self .viewModel,secCodeimageFile) skip : 1 ] map :^ id ( id value) {
       
NSLog ( @"secCodeimageFile == %@" ,value);
       
return [[ UIImage alloc ] initWithContentsOfFile :value];
    }];
// secCodeimageFile第一次为nil,可以通过skip跳过



//catch
/// Subscribes to the returned signal when an error occurs.
- (RACSignal *)catch:(RACSignal * (^)(NSError *error))catchBlock;

    RACSignal *signal1 = [ RACSignal createSignal :^ RACDisposable *( id < RACSubscriber > subscriber) {
        [subscriber
sendError :[ NSError errorWithDomain : @"my fault" code : 100 userInfo : nil ]];
       
return [ RACDisposable disposableWithBlock :^{
           
NSLog ( @"done" );
        }];
    }];
   
   
RACSignal *signal2 = [signal1 catch :^ RACSignal *( NSError *error) {
       
NSLog ( @"catch error" );
       
return [ RACSignal return : @"idiot" ];
    }];
   
    [signal2
subscribeNext :^( id x) {
       
NSLog ( @"x = %@" ,x);
    }];
//catch用于,封装一个错误处理机制的signal,也就是当signal1出现了错误,将创建一个新的错误处理signal2,完成后并处理订阅者的流程
打个比方,如果要为服务器上某个商品点赞+1,但是出现了网络不同,此时,就要把UserDefault里的值减1.

/// Subscribes to the given signal when an error occurs.
- (RACSignal *)catchTo:(RACSignal *)signal;

    RACSignal *signal1 = [ RACSignal createSignal :^ RACDisposable *( id < RACSubscriber > subscriber) {
        [subscriber
sendError :[ NSError errorWithDomain : @"my fault" code : 100 userInfo : nil ]];
       
return [ RACDisposable disposableWithBlock :^{
           
NSLog ( @"done" );
        }];
    }];
   
   
RACSignal *signal2 = [signal1 catchTo :[ RACSignal return : @"my falut" ]];
    [signal2
subscribeNext :^( id x) {
       
NSLog ( @"x = %@" ,x);
    }];

catch与 catchTo的目标是相同的,区别在于catch提供了一个处理error的机会,而catchTo直接无视error


//try
- ( RACSignal *) try :( BOOL (^)( id value, NSError **errorPtr))tryBlock;
    RACSignal *signal1 = [[ RACSignal createSignal :^ RACDisposable *( id < RACSubscriber > subscriber) {
       
// 处理一个网络请求 , 当成功后把结果 okok 发送出去
        [subscriber
sendNext : @"okok" ];
        [subscriber
sendCompleted ];
       
return [ RACDisposable disposableWithBlock :^{
           
NSLog ( @"done" );
        }];
    }]
try :^ BOOL ( NSString *s, NSError * __autoreleasing *errorPtr) {
       
// 在这里尝试判断 signal 的结果 , 当收到了 Next 后 , 判断其值 , 如果结果与预期一样就 , 告诉订阅者
       
// 比如网络请求的结果是对的
       
if ([s hasPrefix : @"ok" ]) {
           
return YES ;
        }
else {
           
return NO ;
        }
    }];
   
    [signal1
subscribeNext :^( id x) {
        NSLog(@“subscribed.%@“,x);
          //x == okok
    }];
- ( RACSignal *)tryMap:( id (^)( id value, NSError **errorPtr))mapBlock

try与tryMap都是为了判断一个signal是否sendNext,区别在于try可以根据结果来决定是否继续并且把kook发送给订阅方,而tryMap则会对值做一个转换再传给订阅方

//delay
- ( RACSignal *)delay:( NSTimeInterval )interval
//sendNext后,再触发subscriber

//deliverOn
- ( RACSignal *)deliverOn:( RACScheduler *)scheduler
deliverOn :[ RACScheduler scheduler ] //订阅者将在ReactiveCocoa创建的工作队列里收到sendNext
deliverOn :[ RACScheduler mainThreadScheduler ] //订阅者将在main thread创建的工作队列里收到sendNext

//if:then:else:
    RACSignal *signal1 = [ RACSignal createSignal :^ RACDisposable *( id < RACSubscriber > subscriber) {
        [subscriber
sendNext : @NO ];
        [subscriber
sendCompleted ];
       
return [ RACDisposable disposableWithBlock :^{
           
NSLog ( @"done" );
        }];
    }];
   
   
RACSignal *signal2 = [ RACSignal defer :^ RACSignal *{
       
NSLog ( @"bbbb" );
       
return [ RACSignal return : @"hello222" ];
    }];
   
   
RACSignal *signal3 = [ RACSignal defer :^ RACSignal *{
       
NSLog ( @"cccc" );
       
return [ RACSignal return : @"hello333" ];
    }];
   
   
    [[
RACSignal if :signal1 then :signal2 else :signal3] subscribeNext :^( id x) {
        NSLog(@"subscribed. %@",x);
//如果signal1 sendNext:@YES,就执行signal2的内容,否则就是signal3


startWith:
RAC ( self .intervalTextField,text) = [[[ RACSignal interval : 1 onScheduler :[ RACScheduler mainThreadScheduler ]] startWith : @"hello" ] map :^ id ( id value) {
       
return [ NSString stringWithFormat : @"text %d" ,count++];
    }];

第一次拿到的值为”hello”,第二个才是text 0

RACAble/ RACAbleWithStart
反向绑定变量,当bindstring发生变化时,intervalTextField.text也会随着改变,但是反过来就不行
RAC ( self .intervalTextField,text) = RACAbleWithStart ( self .bindString);
RACAble 只是绑定, RACAbleWithStart是绑定后,立即对其赋值
    }];

merge/ combineLatest :
    RACSignal *combinding = [ RACSignal merge : @[self . textField1 . rac_textSignal , self . textField2 . rac_textSignal ] ];
   
    [combinding
subscribeNext :^( id x) {
       
NSLog ( @"%@" ,x);
    }
completed :^{
       
NSLog ( @"completed." );
    }];
共同点:当任何一个信号被触发,combinding都会被调起
不同点:merge时x只是被触发的textField内容,combineLatest会把两个textField的值用一个tuple来传入x


RACMulticastConnection public connect
当一个信号被订阅了几次,那么它将会执行几次,见下方代码:
    RACSignal *signal1 = [ RACSignal defer :^ RACSignal *{
       
NSLog ( @"print signal1" );
       
return [ RACSignal return : @"hello" ];
    }];
   
    [signal1
subscribeNext :^( id x) {
       
NSLog ( @"first %@" ,x);
    }];

    [signal1
subscribeNext :^( id x) {
       
NSLog ( @"second %@" ,x);
    }];
2015-06-05 14:35:38.149 DemoCategorizer[15252:2226982] print signal1
2015-06-05 14:35:38.149 DemoCategorizer[15252:2226982] first hello
2015-06-05 14:35:38.149 DemoCategorizer[15252:2226982] print signal1
2015-06-05 14:35:38.149 DemoCategorizer[15252:2226982] second hello
那么,我打算某个网络操作只做一次,然后多个订阅者都可以收到消息,怎么做?
    RACSignal *signal1 = [ RACSignal defer :^ RACSignal *{
       
NSLog ( @"print signal1" );
       
return [ RACSignal return : @"signal1" ];
    }];
   
   
RACMulticastConnection *connection = [signal1 publish ];
    [connection.
signal subscribeNext :^( id x) {
       
NSLog ( @"first next value = %@" ,x);
    }];
   
    [connection.
signal subscribeNext :^( id x) {
       
NSLog ( @"second next value = %@" ,x);
    }];
   
    [connection connect];
2015-06-05 14:38:48.528 DemoCategorizer[15848:2239991] print signal1
2015-06-05 14:38:48.528 DemoCategorizer[15848:2239991] first next value = signal1
2015-06-05 14:38:48.528 DemoCategorizer[15848:2239991] second next value = signal1
signal1只是被执行了一次,神奇不? 详见 http://www.jianshu.com/p/a0a821a2480f


+(RACSignal*)importPhotos{
    NSURLRequest *request = [self popularURLRequest];

    return [[[[[[NSURLConnection rac_sendAsynchronousRequest:request] 
                reduceEach:^id(NSURLResponse *response, NSData *data){
                            return data; 
                }]
                  deliverOn:[RACSchedulermainThreadScheduler]]
                map:^id(NSData*data){
                    id results = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
                    return [[[results[@"photos"] rac_sequence] 
                            map:^id(NSDictionary *photoDictionary){
                                    FRPPhotoModel *model = [FRPPhotoModel new];
                                    [self configurePhotoModel:model withDictionary:photoDictionary];
                                    [self downloadThumbnailForPhotoModel:model];
                                    return model; 
                            }] array];
                }] publish] autoconnect];
}
这里使用到了publish与 auto connect,我的理解是publish返回的是一个 RACMulticastConnection 
这是一个连接多个订阅者的handle
autoconnect的目的是返回一个RACSignal,它连接着多个订阅者,只要有一个订阅者订阅了该信号,那么该信号只会做一次,然后分发给多个订阅者结果.
希望自己将来能看懂.


RACReplaySubject
注意区分RACSubject和其子类RACReplaySubject的不同。RACReplaySubject只能被订阅一次,这避免了重复的重做。replay subject会存储返回的值,并把他们发送给新的订阅者-这正是我们需要的。
- ( RACReplaySubject *)importPhotos{
   
RACReplaySubject *subject = [[ RACReplaySubject alloc ] init ];
   
dispatch_after ( dispatch_time ( DISPATCH_TIME_NOW , ( int64_t )( 5 * NSEC_PER_SEC )), dispatch_get_main_queue (), ^{
        [subject
sendNext : @"myword" ];
        [subject
sendCompleted ];
    });
   
   
return subject;
}
    [[ self importPhotos ] subscribeNext :^( id x) {
       
NSLog ( @"x1 == %@" ,x);
    }];

    [[
self importPhotos ] subscribeNext :^( id x) {
       
NSLog ( @"x2 == %@" ,x);
    }];
2015-06-05 14:58:52.344 DemoCategorizer[19469:2329348] x1 == myword
2015-06-05 14:58:52.345 DemoCategorizer[19469:2329348] x2 == myword
注意两次时间几乎是一样的,原因在于RACReplaySubject把最后一次执行结果保存了下来.

array
取出长度大于3的字符串,再组成一个array
    NSArray *result = [[[[ @[ @"aaaa" , @"bb" , @"ccc" , @"dd" , @"ffffff" ] rac_sequence ] filter :^ BOOL ( id value) {
       
return [value length ] > 3 ;
    }]
map :^ id ( id value) {
       
return value;
    }]
array ];
   
    NSLog(@"result = %@",result);



timeout
    RACSignal *signal =
    [
RACSignal createSignal :^ RACDisposable *( id < RACSubscriber > subscriber) {
       
       
RACDisposable *disposable = [ RACDisposable new ];
       
       
dispatch_async ( dispatch_get_global_queue ( DISPATCH_QUEUE_PRIORITY_DEFAULT , 0 ), ^{
           
NSLog ( @"Start iterating..." );
           
for ( int i = 0 ; i < 200 && !disposable. isDisposed ; i++) {
               
NSLog ( @"Send %i to subscriber" , i);
                [subscriber
sendNext : @( i ) ];
               
                [
NSThread sleepForTimeInterval : 0.1 ];
            }
           
           
if (!disposable. isDisposed ) {
               
NSLog ( @"Send completed to subscriber" );
                [subscriber
sendCompleted ];
            }
        });
       
       
return disposable;
    }];
   
   
NSLog ( @"About to subscribe" );
   
    [[[signal
      
deliverOn :[ RACScheduler mainThreadScheduler ]]
     
timeout : 1.0 onScheduler :[ RACScheduler mainThreadScheduler ]]
    
subscribeNext :^( id x) {
        
NSLog ( @"Got next: %@" , x);
     }
error :^( NSError *error) {
        
NSLog ( @"Error (timeout): %@" , [error localizedDescription ]);
     }
completed :^{
        
NSLog ( @"Completed" );
     }];
如果在1秒钟之内没有收到sendCompleted,那么timeout将会发送一个error出来.参考 http://spin.atomicobject.com/2014/09/25/timeouts-in-reactivecocoa/




@weakify(self);

RACSignal *enabled = [[RACObserve(self, viewModels)
   
// Map _each_ array of view models to a signal determining whether the command
   
// should be enabled.
   
map:^(NSArray *viewModels) {
       
RACSequence *selectionSignals = [[viewModels.rac_sequence
           
map:^(ViewModel *viewModel) {
               
// RACObserve() implicitly retains `self`, so we need to avoid
               
// a retain cycle.
               
@strongify(self);

               
// Observe each view model's `isSelected` property for changes.
               
return RACObserve(viewModel, isSelected);
           
}]
           
// Ensure we always have one YES for the -and below.
            startWith
:[RACSignal return:@YES]];

       
// Sends YES whenever all of the view models are selected, NO otherwise.
       
return [[RACSignal
            combineLatest
:selectionSignals]
            and
];
   
}]
   
// Then, ensure that we only subscribe to the _latest_ signal returned from
   
// the block above (i.e., the observations from the latest `viewModels`).
    switchToLatest
];

观察NSArray里所有对象里的一个Bool变量




倒数计时3秒,再开始录音10秒
    __block NSInteger second = 3 ;
   
RACSignal *timer = [[[ RACSignal interval : 1 onScheduler :[ RACScheduler mainThreadScheduler ]] take : 3 ] map :^ id ( id value) {
       
NSLog ( @"ready time = %ld" ,second--);
       
return @YES ;
    }];
   
RACSignal *record = [ RACSignal createSignal :^ RACDisposable *( id < RACSubscriber > subscriber) {
       
DDLogDebug ( @"start recording." );
       
RACSignal *signal = [[ RACSignal interval : 1 onScheduler :[ RACScheduler mainThreadScheduler ]] take : 10 ];
       
RACDisposable *disposable = [signal subscribeNext :^( id x) {
           
NSLog ( @"recording sec %ld" ,second++);
            [subscriber
sendNext :x];
           
        }
completed :^{
           
NSLog ( @"record completed." );
            [subscriber
sendCompleted ];
        }];
       
       
return disposable;
    }];
   
RACSignal *chianSignal =  [timer concat :record];
   
    [chianSignal
subscribeNext :^( id x) {
       
NSLog ( @"x = %@" ,x);
    }
completed :^{
       
NSLog ( @"all done" );
    }];


// - ( RACSignal *)initially:( void (^)( void ))block
///   // Write new file, with backup.
///   [[[[fileManager
///       rac_createFileAtPath:path contents:data]
///       initially:^{
///           // 2. Second, backup current file
///           [fileManager moveItemAtPath:path toPath:backupPath error:nil];
///       }]
///       initially:^{
///           // 1. First, acquire write lock.
///           [writeLock lock];
///       }]
///       finally:^{
///           [writeLock unlock];
///       }];


// - ( RACSignal *)bufferWithTime:( NSTimeInterval )interval onScheduler:( RACScheduler *)scheduler
当single要在很短的时候内吐出N个value, bufferWithTime可以以interval的间隔分割它们.
它确保了每interval时间内,只收到一次next,value为期间的所有的内容tuple


//-replay 总是收取最后的内容,而并不执行signal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  __block int num = 0;
  RACSignal *signal = [[RACSignal createSignal:^RACDisposable *(id  subscriber) {
      num++;
      NSLog(@"Increment num to: %i", num);
      [subscriber sendNext:@(num)];
      return nil;
  }] replay];
 
  NSLog(@"Start subscriptions");
 
  // Subscriber 1 (S1)
  [signal subscribeNext:^(id x) {
      NSLog(@"S1: %@", x);
  }];
 
  // Subscriber 2 (S2)
  [signal subscribeNext:^(id x) {
      NSLog(@"S2: %@", x);
  }];
 
  // Subscriber 3 (S3)
  [signal subscribeNext:^(id x) {
      NSLog(@"S3: %@", x);
  }];
  Increment num to: 1
  Start subscriptions
  S1: 1
  S2: 1
  S3: 1
-replay  总是取出第一订阅者取到的 所有结果
-replayLast 总是取出第一个订阅者取到的 最后一个结果
-replayLazily有点说不上来
replayLazily does not subscribe to the signal immediately – it lazily waits until there is a “real” subscriber. But replay subscribes immediately. So as you point out, with replayLazily the “A” value would not be sent to subscribers of the signal because it was sent before there was anything listening.


- ( RACSignal *)aggregateWithStartFactory:( id (^)( void ))startFactory reduce:( id (^)( id running, id next))reduceBlock
- ( RACSignal *)aggregateWithStart:( id )start reduce:( id (^)( id running, id next))reduceBlock
- ( RACSignal *)aggregateWithStart:( id )start reduceWithIndex:( id (^)( id , id , NSUInteger ))reduceBlock 

这三个货的作用,收到signal发送过来的next值,通过reduce
    RACSequence *seq = [ @"a b c d e f" componentsSeparatedByString : @" " ]. rac_sequence ;
    [[seq.
signal aggregateWithStart :[ NSMutableSet set ] reduce :^ id ( id running, id next) {
       
NSLog ( @"running = %@, next = %@" ,running,next);
       
NSString *newString = [next stringByAppendingString :next];
        [running
addObject :newString];
       
return running;
    }]
subscribeNext :^( id x) {
       
NSLog ( @"x = %@" ,x);
    }
completed :^{
       
NSLog ( @"completed" );
    }];
output:
2015-07-09 16:19:42.556 DemoCategorizer[74923:2050916] running = {(
)}, next = a
2015-07-09 16:19:42.556 DemoCategorizer[74923:2050916] running = {(
    aa
)}, next = b
2015-07-09 16:19:42.557 DemoCategorizer[74923:2050916] running = {(
    aa,
    bb
)}, next = c
2015-07-09 16:19:42.557 DemoCategorizer[74923:2050916] running = {(
    cc,
    aa,
    bb
)}, next = d
2015-07-09 16:19:42.557 DemoCategorizer[74923:2050916] running = {(
    cc,
    dd,
    aa,
    bb
)}, next = e
2015-07-09 16:19:42.557 DemoCategorizer[74923:2050916] running = {(
    cc,
    dd,
    aa,
    ee,
    bb
)}, next = f
2015-07-09 16:19:42.557 DemoCategorizer[74923:2050916] x = {(
    cc,
    dd,
    aa,
    ee,
    bb,
    ff
)}
2015-07-09 16:19:42.557 DemoCategorizer[74923:2050916] completed
直到set遍历完所有的值,最后由next吐出来

//throttle
    RACSignal *s2 = [[ RACSignal interval : 5 onScheduler :[ RACScheduler mainThreadScheduler ]] map :^ id ( id value) {
       
return @"s2" ;
    }];
   
   
RACSignal *s3 = [s2 throttle : 3 ]; //3 秒钟之内 , 没有第二个 sendNext, 即 s3 sendNext
    [s3
subscribeNext :^( id x) {
       
NSLog ( @"%@" ,x);
    }];
YOLOv8自动驾驶系统 —— 夜间低光照条件 详细说明和完整代码 本文提出一种针对夜间低光照优化的自动驾驶车道保持系统方案,基于YOLOv8模型改进,包含三大核心技术:1.采用Retinex理论的多尺度低光增强算法,结合自适应伽马校正;2.改进YOLOv8的车道检测模型,通过夜间专用数据集训练,增加抗眩光处理;3.多传感器融合框架,整合可见光与红外图像。系统实现动态逆透视变换和参数调整,在Jetson Orin硬件上达到30ms级实时性能。测试显示在无照明、眩光干扰等极端场景下保持稳定,代码已开源。扩展方向包括V2X协同定位和自适应大灯联动控制。 阅读详情

相关推荐

MiniMax H3本地部署与ComfyUI集成实战:从环境配置到提示词优化

文本到视频生成是AI内容创作领域的关键技术,它基于扩散模型等深度学习原理,将自然语言描述转化为连贯的动态视觉序列。这项技术的核心价值在于大幅降低了视频制作的门槛,为短视频创作、概念可视化、教育内容生成等场景提供了高效工具。在实际工程实践中,成功部署和运行此类模型,如近期备受关注的MiniMax H3,需要精准处理环境配置、显存优化和提示词工程等环节。其中,解决“CUDA error: no kernel image is available”等版本兼容性问题,以及针对“8G显存”等有限资源进行参数调优,是确

weixin_33674976的博客 478

Oracle RAC详解

RAC是什么? 和单机概念进行对比:单机是一个实例,1个数据库;RAC是多个实例,一个数据库,多个实例之间共享一个数据库,但是不是分布式,这就是RAC,简单来说就是一个集群。 为什么会有RAC的需求? 为了实现数据的高可用,以数据的高可用为目标,这也是RAC最大的特点: 就像每家每户用电一样,作为用电户总是不希望家里出现停电的情况,因为停电将对日常生活带来极大的不便。同样,作为信息系统的客户也不希望系统出现异常情况,这同样会影响客户正常的生产和生活。 1)从硬件来说,为了追求信息系统更加高效稳定的

qq_33410995的博客 2万+

VLA强化学习训练:π0到π0.5的技术优化与实现

视觉语言动作模型(VLA)作为多模态强化学习的重要分支,通过融合视觉、语言和环境状态数据实现智能决策。其核心技术在于多模态特征融合与动作空间设计,其中PPO算法因其出色的训练稳定性成为首选方案。在工程实践中,延迟补偿机制和课程学习设计能显著提升模型性能,如在四足机器人项目中使避障成功率提升47%。针对实际部署中的性能下降问题,需要特别关注硬件量化参数和控制频率一致性等关键因素。本文通过π0与π0.5版本的对比实验,详细解析了VLA模型在机械臂控制等具身智能场景中的优化路径。

weixin_29041767的博客 246

rac 架构和原理

单点数据库VS RAC  单节点数据库,如果实例宕机了,如果一个业务链接在实例上面,那么这个业务就中断了。这个时候系统就不具有可用性了,那么这个时候单节点的可用性是很差的。 对于RAC来说,和单实例一样,还是一份数据文件,都是相同的存储上面放着oracle的文件,但是是由三个实例共用同一份数据文件。这样的好处是在三个实例之间做了冗余,在上面三个实例当中任意两个坏了业务都可以链接到剩下的一个实例,都可以正常的工作。RAC提供了在实例级别的冗余。 RAC不能够解决在数据的安全,尽管有多个实例,.

羽之大公公的博客 5657

freeswitch之呼叫中心acd模块开发

一、定义: ACD(Automatic Call Distributor) 自动呼叫分配,也叫智能选择座席。它是呼叫中心整个前台接入系统逻辑功能的描述:把接入的呼叫转接到正确的座席员桌前。ACD是现代呼叫中心有别于一般的热线电话系统和自动应答系统的重要标志,其性能的优劣直接影响到呼叫中心的效率和顾客的满意度。 二、ACD包含的功能点: 1 、程控交换功能 ACD在本质上也是交换机的一种类型,必须具有程控交换最基本的话务交换功能。 2 、排队功能 ACD必须具有话务排队的功能,所谓排队是指在内线都

飞鸟的博客 1870

C++ bitset总结

数据结构bitset 术语:某1位置位是置1,某一位复位是某一位清零。 文章目录数据结构bitset一、3种初始化方式二、位访问三、位操作四、 位集操作总结实战练习 一、3种初始化方式 bitset<32> tmp; //默认构造函数,默认全0。 bitset<32> tmp(-1); //从整形数构造 bitset<32> tmp("101"); //从包含1和0的字符串构造 二、位访问 bitset<32> tmp(256)

qq_43807092的博客 721

RAC介绍以及好处

关于RAC的理解以及好处

weixin_72843193的博客 2959

手把手教你设计T型和Π型衰减器:从分贝计算到电阻选型全攻略

本文提供了一份T型和Π型衰减器的详细设计指南,涵盖从分贝计算到电阻选型的全过程。文章以50欧姆系统为例,通过公式推导和实例演示,手把手教你计算两种经典拓扑的电阻值,并深入探讨了电阻选型、误差控制及高频应用等关键实践技巧,帮助工程师和爱好者精准实现信号衰减与阻抗匹配。

blue42的博客 1333

Oracle RAC原理详解

Oracle RAC原理详解 转载weixin_34174322最后发布于2018-11-08 21:04:00阅读数 2130收藏 real application clusters(RAC) 1、什么是cluster 一个cluster是由两个或多个独立的、通过网络连接的servers组成的。集群的目的主要有两方面:提高可用性,在当前活动的node发生故障时自动转移到次节点no...

cxu123321的博客 1万+

Chapter 19 Digital Phase-Locked Loops

数字锁相环 Digital Phase-Locked Loops, 就是根据原来时钟信号, 产生新的时钟信号, which is locked or synchronized. (align 参考时钟边沿 or 在中间)

2304_76736886的博客 973

出现 Transaction rolled back because it has been marked as rollback-only 解决方法

出现 Transaction rolled back because it has been marked as rollback-only 解决方法

码农研究僧的博客 1万+

笔记本搭建11gR2 RAC环境

本人经常在外出差,工作大部分都会涉及到RAC环境,没有RAC环境工作、学习都非常的不方便。狠下心来在自己的笔记本上搭建了个基于Linux平台的11gR2。写这篇文章将自己搭建过程记录下来。 11gR...

congxinlan3332的博客 171

蓝鸟四轴飞控系统C程序V3.0(基础版本)深度解读

2. 解析遥控通道数据(油门 / 横滚 / 俯仰 / 偏航),转换为标准化值(-1000~+1000);3. 封装PID初始化(PID_Init,配置KP/KI/KD、输出限幅、积分限幅);,包含姿态角(Attitude_Data.Roll/Pitch/Yaw)、角速度(Gyro_Data.X/Y/Z)、遥控值(RC_Data[0~5])、电池电压(Bat_Volt)、电机PWM值(Motor_PWM[0~3])、系统状态(Sys_State),校验和通过Check_Sum()函数计算;

搏博的专栏 343

RAC student guide 的中文笔记

RAC student guide 的中文笔记 Rac student guide一.体系结构Cluser 的硬件结构Nodes, interconnect,共享文件系统Nodes一个节点是一个服务器可以是smp也...

110

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Oracle RAC学习笔记01-集群理论

Oracle RAC学习笔记01-集群理论 1.集群相关理论概述 2.Oracle Clusterware 3.Oracle RAC 原理 写在前面: 最近一直在看张晓明的大话Oracle RAC,真实感受就是学到很多之前自己都没深入思考研究过的知识点,现在趁着节前头脑尚清醒,再结合实际工作中自己曾遇到的一些案例,就把这段时间自己学到的东西总结一下。 1.集群相关理论概述 一个集群

eouaq448466的博客 497

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

rac笔记

RAC(realtime Application Cluster) CRS(Cluster Ready Service) GI(GRID Infrastructture) DLM(Dynamic Lock Management) GRD(Global Resource Directory) CGS(Cluster Group Service) GES(Global Enqueue Service)...

whb234174124的博客 389

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

oracle rac 笔记

一、集群分类 1.高性能计算集群:计算任务分配到不同节点来提供计算能力 2.负载均衡集群:讲负载流量平均分配到各个节点 3.高可用集群:具有容错性。如果某个节点发生故障,将有其他节点替代。 二、常见问题 1.并发控制。控制节点对数据访问。oracle rac通过DLM机制解决 2.健忘:由于配置文件在每个节点都有一个副本,会导致每个节点配置文件不统一,更新不一致。 3.脑裂:心跳

数据库专栏 935

RAC概念笔记

Cache Fusion(内存融合)是通过高速的Private Interconnect,在实例间进行数据块传递,它是RAC 最核心的工作机制,GCS主要负责协调不同实例间对数据块的访问,它们通过Global Resource Directory(GRD)来维护和记录每个数据块的状态,整个cache funsion有两个服务:GCS和GES,GCS负责数据块在实例间的传递,而后者负责锁管理。总结:LMS负责协调实例间数据块的传递,LMD负责协调全局锁,LCK负责协调实例锁。

TEST_ID_KING的博客 450

Oracle Rac 添加节点测试笔记

一、测试环境 主机名 实例名 操作系统 数据库版本 rac1 racdb1 RHEL 6.5 64位 11.2.0.4.0 rac2 racdb2 RHEL 6.5 64位 11.2.0.4.0 rac3(添加) racdb3 RHEL 6.5 64位 11.2.0.4.0 rac4(添加) racdb...

白昼的技术专栏 4366

大话ORACLE RAC 笔记之RAC架构

RAC下的并发控制 Real Application Cluster 真正应用集群不是双机热备,一台机器在空闲中等待 。它是Share-Disk的集群架构 。原来在...

cuanzhe7492的博客 329

大话ORACLE RAC 笔记之RAC与Clusterware

RAC与Clusterware的交互 Clusterware要决定集群组成 、成员身份、成员状态,Clusterware并不关心上一层应用到底是数据库或是WEB应用。它 只负责收集集群节点状态 ...

cuanzhe7492的博客 407

执行计划 RAC 笔记

/收集运行时的统计信息,包括行数,一直读取次数,物理读次数,物理写次数以及运算在一行数据上耗费的运行时间,如果没有指定该参数,就不会有A-Rows,A-Time,Buffers这三列信息。使用rman进行恢复时,如果使用了set newname 修改恢复后文件的路径,那么恢复后控制文件里面的信息是没有修改该的,6、在单实例数据库上备份新产生的数据,主要是归档,备份之前要断开业务,避免产生新的数据,备份完传送到RAC。utlrp.sql脚本可以在数据库运行的状态下执行以编译、数据库中的invalid对象.

TEST_ID_KING的博客 901

RAC学习笔记

RAC学习笔记 ReactiveCocoa(简称为RAC),是由Github开源的一个应用于iOS和OS开发的新框架,Cocoa是苹果整套框架的简称,因此很多苹果框架喜欢以Cocoa结尾。 在学习ReactiveCocoa之前,先学习一下概念 ReactiveCocoa 是一套开源的基于Cocoa的FRP框架 .FRP的全称是Functional Reactive Programm...

dengzilan4940的博客 334

12C RAC笔记

参考文档: Clusterware Administration (D81246GC10_ag.pdf、D81246GC10_sg.pdf) RAC Administration Ed 1.1(D81250GC10_ag.pdf、D81250GC10_sg.pdf) RAC and Grid Infra Deployment Workshop Ed 1 (D87007GC10_ag.pdf、D87007GC10_sg.pdf) ..

文档搬运工 329

rac 学习日记-- 一些内容主要是从 《大话 rac》里面摘抄的,便于以后记忆

 rac 学习日记-- 一些内容主要是从 《大话 rac》里面摘抄的,便于以后记忆http://space.itpub.net/14730395/viewspace-681540

我的Oracle DBA之路 484

RAC学习笔记-RACStream

RACStream什么是 RAC?RACStream具体实现代码抽象方法+empty;+return如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 什么是 RA...

UIApplicationMain的博客 415
上一篇: Xcode升级后插件失效的原理与修复办法
下一篇: Detect volume change
sjcode
博客等级 码龄22年 24粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值