Có cách nào tôi có thể có coroutines thread an toàn cùng với tăng :: asio?Chủ đề an toàn coroutines với asio
Tôi muốn một io_service
để chạy trên nhiều luồng và có một số trình xử lý của tôi là coroutines.
Boost.Coroutine dường như là một giải pháp, nhưng chúng document rằng chúng không hỗ trợ việc tiếp tục một coroutine được bắt đầu trong một chuỗi riêng biệt.
Theo như tôi biết chỉ có hai giải pháp khả thi cho vấn đề này:
- Không sử dụng coroutines. Sử dụng nhiều chi tiết hơn (ngay cả với lambda), nhưng phương pháp chức năng giống nhau của chuỗi gọi lại mà lưu trữ nhà nước.
- Buộc mỗi trình xử lý chỉ chạy trong một chuỗi. Tôi biết điều này là có thể bằng cách đơn giản có một io_service riêng biệt cho mỗi luồng. Là một sang một bên, là có một cách dễ dàng, tương tự như io_service :: strand, để buộc một bộ xử lý để chạy trong cùng một thread?
Không có giải pháp tốt nào. Trong một giải pháp tôi mất coroutines. Mặt khác, tôi mất hầu hết khả năng đa luồng của mình.
FYI: Bạn đã xem http://blog.think-async.com/2009/08/secret-sauce-revealed.html và http://blog.think-async.com/2010/03/potted- hướng dẫn-to-stackless-coroutines.html? – Ralf
@Ralf Vâng tôi đã thấy điều đó, đó là lý do tại sao tôi hỏi câu hỏi này. Có vẻ như một ý tưởng rất hay và một cách dễ dàng hơn để viết mã không đồng bộ. – Lalaland