2011-01-31 8 views
5

Boost :: asio (unlivious transfer schemes) kullanarak bir dizi basit protokol uygularım. Çalışırken CPU bağlı. Verimliliği artırmak için, her iki ana bilgisayarın da olabildiğince çalışmasını sağlamak istiyorum. Eğer ev sahibi A, iki görevi önceden yapmak arasında seçim yaparsa, bunlardan biri, B ana bilgisayarının hesaplamaya başlamasını sağlardı ve bir diğeri de, A'yı eskiyi seçmek için istemiyorum.Boost :: asio'yu, diğer işleyicileri çalıştırmaya yönelik bitirme async_write çağrılarına öncelik vermek için nasıl zorlarım?

Şu anda, io_service, async_writes'ten önce hesaplama yoğun işlemcileri çalıştırıyor. Tcp penceresi dolmadıkça (ya da benzer bir durum, yazma verisini socker'a engelliyorsa), diğer işleyiciyi çalıştırmaktan ziyade async_write işlemini bitirmek kesinlikle daha iyidir.

Asio'nun işleyiciler için öncelik sırası örneği olduğunu gördüm. Böyle bir öncelik sırasını kullanmak için async_write'ı yeniden kullanmak benim sorunumun tek çözümünü? Tamamlama işleyicilerine nasıl öncelik ekleneceğini açıklayan belgede an example var.

cevap

3

. async_write'u yeniden tazelemek zorunda kalmayacaksınız, sadece kendi örneğinizle handler_priority_queue sınıfını uygulayınız.

+0

Bu örneği gördüm. Async_write'e nasıl öncelik ekleneceğini anlamıyorum. Yazma eşzamansız olduğundan, async_write için dahili olarak adlandırılan tamamlama işleyicileri olduğuna inanıyorum. Eğer öyleyse, onların önceliklerini yükseltmem gerekiyor. – Amy

+0

@Amy 'async_write', oluşan bir işlem olduğundan endişe duyuyor musunuz? –

+0

Async_write'in bir tamamlama işleyicisi olmadığı konusunda endişeliyim (Bunun Handler'i uygulayan ve io_service :: post'a iletilen bir şey olduğunu varsayalım). Ayrıca async_write'in oluşturulmuş bir işlem olduğu gerçeğinden de endişeliyim. – Amy

İlgili konular