[VS2015U2] применение корутин
От: uzhas Ниоткуда  
Дата: 20.06.16 16:55
Оценка:
приветствую.
слышал, что в VS2015U2 есть await
кто-нибудь уже игрался? какие отзывы можете дать по безглючности и какие прикладные задачи вы успешно решили с помощью этой фичи?
так же интересует каким образом можно реализовать следующую задачу:
у меня внутри приложения есть два слоя rpc:
1) по сети от внешний клиентов, своя либа без возможности прикрутить корутины
2) свой rpc (то есть там не сеть, а своя шина c потоками и очередями сообщений), хочу его завернуть в корутины в надежде, что код упростится

какие вспомогательные вещи надо написать, чтобы код вызывающей стороны упростился без пенальти по производительности?

пример текущего кода
class InputBus
{
  void PushRequest1(Request1 r); <-- contains client id
}

class OutpuBus
{
  void PushReply1(Reply1 r)
}


// client (может быть много таких клиентов, у всех уникальный id в рамках процесса)
bus1.PushRequest1(clientId, r);

ClientHandler()
{
  bus1.SubscribeOnMessage(this, OnReply1)
}

ClientHandler::OnReply1(Reply1 r)
{
  //find by client id
  client->HandleReply1(r);
}

//logic thread
Logic()
{
  bus2.SubscribeOnMessage(this, OnRequest1);
}

Logic::OnRequest1(r1)
{
  //do something in this thread
  bus.SendReply1(clientId, reply);
}



могу попробовать переформулировать: есть два потока, которые общаются пересылкой сообщений, причем сообщения имеют два типа: request / reply
как построить взаимодействие на корутинах (с использованием всяких новых слов await/async/yield/resumable function)?
судя по https://blogs.msdn.microsoft.com/vcblog/2015/11/30/coroutines-in-visual-studio-2015-update-1/ , надо как-то определить методы await_ready / await_suspend / await_resume , но не знаю то ли это
Re: [VS2015U2] применение корутин
От: BulatZiganshin  
Дата: 21.06.16 07:16
Оценка:
Здравствуйте, uzhas, Вы писали:

U>слышал, что в VS2015U2 есть await

U>кто-нибудь уже игрался? какие отзывы можете дать по безглючности и какие прикладные задачи вы успешно решили с помощью этой фичи?

stackless coroutines — экспериментаольная фича языка, спецификации которой ещё могут мгногократно поменяться. есть смысл использовать именно для экспериметов, а не продакшн

как я понимаю, они более ограничены в возможностях чем stackful coro. поэтому если у тебя нет специфичных требований, типа одновременной работы тысяч корутин в 32-битной программе, советую использовать именно stackful из того же буста

ps: не пробовал и даже спеки не читал

U> 2) свой rpc (то есть там не сеть, а своя шина c потоками и очередями сообщений), хочу его завернуть в корутины в надежде, что код упростится


очень советую intel tbb, сам планирую его применить именно для организации работы как графа сообщений. в принципе для тебя есть ещё и ms tpl, но там нет поддержки произвольных графов сообщений afair
Люди, я люблю вас! Будьте бдительны!!!
Отредактировано 21.06.2016 7:20 BulatZiganshin . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.