我有一个客户端/服务器模型,每个客户端都可以向服务器发送一个任务——这称为任务请求。
这是我追求的简单分布式计算库的基础。
”换句话说,如果一些普通的应用程序处理一个独立元素的数组,那么在数据并行模型中,每个处理器被分配处理数组的一部分。为了支持数据并行计算,核心库应该将任务划分为部分,将任务数据传输到特定 CPU 的本地内存,在该 CPU 上运行任务,将结果传输回调用者,并提供向调用者请求一些全局数据的能力。 ”
- 任务是二进制(std::vector uint8_t) 和有效负载(std::vector uint8_t)。
- 二进制文件只是一个已编译的任务/应用程序。
- 有效负载是序列化为 uint8_t 的可选数据。
很简单:
class CGridTask
{
public:
...
bool Run ();
private:
std::vector<uint8_t> m_vBinary;
std::vector<uint8_t> m_vPayload;
uint32_t m_uiUniqueId;
...
}
伪图显示了它是如何“工作”的:
[CLIENT1]---[SEND TASK with PAYLOAD: integer value = 10]-->[SERVER]
[SERVER]-->[RUN TASK with PAYLOAD]
[TASK, start]
[TASK, calculate...]
[TASK, calculate...]
[TASK, calculate...]
[TASK, integer value = 10 + some new value]
[TASK, return]
[SERVER]-->[SEND TASK to CLIENT1]
好的,所以当服务器调用时:
pGridTask->Run();
这是应该发生的事情:
bool CGridTask::Run()
{
// Dump the binary to a temporary file
Dump(m_vBinary);
// Chmod +x
system("chmod +x " + strTempopraryBinaryName);
// Run the binary and pass m_vPayload
...how can i do this?...
// Return true if binary executed
return true;
}
这里唯一的问题是与执行的二进制文件共享 m_vPayload ......我该怎么做?
非常感谢您对此的任何意见!