Czy istnieje sposób, w jaki mogę mieć bezpieczne dla wątków coroutines wraz z boost :: asio?Gwintowe coroutiny z asio
Chcę, aby jeden io_service
był uruchomiony na wielu wątkach i aby niektóre z moich programów obsługi były współprogramami.
Boost.Coroutine wydaje się być rozwiązaniem, ale one document nie obsługują wznowienia coroutine, który został uruchomiony w osobnym wątku.
O ile wiem, że są tylko dwa możliwe rozwiązania tego problemu:
- Nie używają współprogram. Używaj dużo bardziej gadatliwej (nawet z lambda), ale równie funkcjonalnej metody łączenia zwrotów zwrotnych od stanu sklepu.
- Wymuszaj uruchamianie każdego programu obsługi tylko w jednym wątku. Wiem, że jest to możliwe, po prostu mając oddzielne io_service dla każdego wątku. Na marginesie, czy istnieje prosty sposób, podobny do io_service :: strand, aby zmusić zestaw procedur obsługi do działania w tym samym wątku?
W żaden sposób nie są dobre rozwiązania. W jednym rozwiązaniu tracę coroutines. W innym tracę większość mojej zdolności wielowątkowej.
FYI: Widziałeś http://blog.think-async.com/2009/08/secret-sauce-revealed.html i http://blog.think-async.com/2010/03/pl/ guide-to-stackless-coroutines.html? – Ralf
@Ralf Yeah Widziałem to, dlatego właśnie zadaję to pytanie. Wydaje się, że jest to bardzo fajny pomysł i łatwiejszy sposób pisania asynchronicznego kodu. – Lalaland