Open
Description
- 启动进程 A 调用 do_send()
- 启动进程 B 调用 do_recv(),此时打印的耗时大概是30~50us
- 杀死进程B
- 再启动进程B,此时打印的耗时大概是 2308us 左右
constexpr auto payload_size = 64 * 1024;
void do_send() {
std::unique_ptr<ipc::channel> sender = std::make_unique<ipc::channel>("ipc");
if (!sender->reconnect(ipc::sender))
{
std::cout << "reconnect ipc sender failure" << std::endl;
exit(-1);
}
sender->wait_for_recv(1);
std::string buffer(payload_size, 'A');
while (true)
{
*(uint64_t*)buffer.data() = get_system_ns();
if (!sender->try_send(buffer.c_str(), payload_size))
{
std::cout << "send data failure" << std::endl;
sender->disconnect();
sender = nullptr;
std::this_thread::sleep_for(std::chrono::milliseconds(5000));
sender = std::make_unique<ipc::channel>("ipc");
if (!sender->reconnect(ipc::sender))
{
std::cout << "reconnect ipc sender failure" << std::endl;
exit(-1);
}
std::cout << "wait_for_recv" << std::endl;
sender->wait_for_recv(1);
}
std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
}
void do_recv() {
std::unique_ptr<ipc::channel> receiver = std::make_unique<ipc::channel>("ipc");
if (!receiver->reconnect(ipc::receiver))
{
std::cout << "reconnect ipc receiver failure" << std::endl;
exit(-1);
}
while (true)
{
ipc::buff_t recv = receiver->recv(1000);
if (recv.empty())
{
std::cout << "recv timeout, exit..." << std::endl;
exit(-1);
}
if (recv.size() != payload_size)
printf("!!!!!!!!!!!!!!!!!!!!!!!!!!!!! recv size = %zd, != %d\n", recv.size(), payload_size);
printf("ipc recv cost time %.2f us\n", (get_system_ns() - *(int64_t*)recv.data())/ 1e3);
}
}