Async vs. Coroutine: эффективность передачи данных UDP [закрыто]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Async vs. Coroutine: эффективность передачи данных UDP [закрыто]

Сообщение Anonymous »

Какой метод имеет самую низкую задержку для отправки данных UDP по потокам, test_send_asyncor test_send_coro? Или есть другие хорошие подходы? При создании/уничтожении стеков с коратиками могут быть узкие места производительности?#include
#include

using namespace asio;
using namespace asio::ip;

io_context g_ctx;

void test_send_async(udp::socket& sock)
{
printf("test_send_async\n");
g_ctx.post([&sock]()
{
udp::endpoint addr(address_v4::from_string("1.1.1.1"), 123);
sock.async_send_to(buffer("hello"), addr,
[](const error_code& ec, size_t n)
{
});
});
}

void test_send_coro(udp::socket& sock)
{
printf("test_send_coro\n");
co_spawn(g_ctx, [&sock]() -> awaitable
{
udp::endpoint addr(address_v4::from_string("1.1.1.1"), 123);
auto [ec,n] = co_await sock.async_send_to(buffer("hello"), addr, as_tuple(deferred));
}, detached);
}

auto coro_main() -> awaitable
{
printf("coro_main bedin\n");
steady_timer timer(g_ctx);
while (true)
{
timer.expires_from_now(std::chrono::seconds(1));
co_await timer.async_wait(as_tuple(use_awaitable));

//do something ...
}
}

int main()
{
WSAData data;
WSAStartup(0x0202, &data);

udp::socket sock(g_ctx, udp::v4());

co_spawn(g_ctx, coro_main(), detached);

std::thread th([&sock]()
{
while (true)
{
test_send_async(sock);
test_send_coro(sock);

std::this_thread::sleep_for(std::chrono::seconds(1));
}
});

g_ctx.run();

th.join();
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... ansmission
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»