当前位置: 首页 > 工具软件 > Theron > 使用案例 >

Theron : No 1 - 入门小记

糜单弓
2023-12-01

上周看了openMP主要是针对for循环进行并行。记住几种语法就可以了。经典的如下。

#pragma omp parallel for

 

本周在师父指导下开始看Theron。

现在的理解,Actor + Receiver + Catcher + Framework

注意的点:

1. Actor之间的message需要安全复制。

  1.1 对于复杂类型来说复制构造函数的很有必要

  1.2  大数据或复杂类型,像Vector和map进行复制拷贝会很快成为性能的瓶颈。应考虑轻量的数据类型代替。

共享指针同样会有并发访问的问题。应该确保让发送者和接受者不会同时操作共享内存。 (Actor设计应该就是要避免共享内存的。)

2. Catcher 用来缓冲(buffer up)Receiver中的数据。它的push方法能被receiver注册用来做消息处理。

(注意体会这种register的设计,receiver里面应该是有个message handler queue,register就可以往里面添加handler。)

(啥时候自己可以写这样一个结构。)

    Theron::Receiver receiver;
    Theron::Catcher<ReadRequest> resultCatcher;
    receiver.RegisterHandler(&resultCatcher, &Theron::Catcher<ReadRequest>::Push);
 
//处理结果 while (!resultCatcher.Empty()) { resultCatcher.Pop(result, from); printf("Read %d bytes from file '%s'\n", result.mFileSize, result.mFileName); // Free the allocated buffer. delete [] result.mBuffer; }

 

3. Dispatcher  if+while

构造的时候每个文件都构造了一个worker,把地址传给free worker queue。

逻辑,消息处理过了,send消息,free worker队列加回;没处理过, work message队列中加入此条。

while free worker和work messages中都不为空,send消息到free队列中,两个队列都pop。

Dispatcher<ReadRequest> dispatcher(framework, MAX_FILES);
framework.Send(message, receiver.GetAddress(), dispatcher.GetAddress());

4. 线程池和处理器的指定

    Theron::Framework::Parameters frameworkParams;
    frameworkParams.mThreadCount = MAX_FILES;
    frameworkParams.mProcessorMask = (1UL << 0) | (1UL << 1);
    Theron::Framework framework(frameworkParams);

 

Reference:

http://www.theron-library.com/index.php?t=page&p=lesson02

 

 

 

转载于:https://www.cnblogs.com/surgod/p/3648975.html

 类似资料: