2016-11-05 30 views
5

Bir havuz koruyan bir gen_server işlemim var, her gelen istek için, bu gelen istek için bir eşleşme olup olmadığını görmek için havuzu incelemem gerekiyor, varsa, eşleşen havuzdan kaldırılır ve yanıtlar her iki istek için yapılır; Hiçbiri yoksa, yeni istek daha sonra inceleme için havuza konur. Erlang: Çok sayıda zamanlayıcı var mı?

biz mantığı

bir istek, R, eşleştirilmiş olmadan T saniye havuzda oturur, ben "Senin için bir eşleşme bulamıyor" gibi bir şey söyleyerek R bir yanıt yapmak gerekir, gerektirir.

İdeal olarak, özellikle gelen her istek için zamanlayıcılarla bunu yapmak istiyorum, eğer bir eşleşme yoksa, daha önce olduğu gibi havuza koyun, ama aynı zamanda eğer zaman varsa gen_server'i kaldırması için bir zamanlayıcıyı da başlatın Tabii ki, daha sonra eşleşirse, zamanlayıcı iptal edilmelidir.

Benim endişem şu ki, Havuzda çok sayıda eşleşmemiş istek varsa, bu durumda çok fazla zamanlayıcı olacak, bu (çok fazla zamanlayıcı) bir sorun olur mu?

+1

Zamanlayıcılar aynı şekilde çalışırlar, biliyorum: zamanlayıcı genellikle başlatılır ve performans penaltıları kullanılırken, binlerce işlemde 'erlang: send_after 'kullanılırken sık rastlanan bir durumdur. – Reith

+0

@Reith 'erlang: send_after' kullanıyorum –

cevap

6

Zamanlayıcı uygulamasında R18'da büyük gelişmeler yapıldı.

Besides the API changes and time warp modes a lot of 
    scalability and performance improvements regarding time 
    management has been made internally in the runtime system. 
    Examples of such improvements are scheduler specific timer 
    wheels, scheduler specific BIF timer management, parallel 
    retrieval of monotonic time and system time on systems with 
    primitives that are not buggy. 

zamanlayıcı belirli zamanlayıcı tekerlekler senaryonuzdaki ilginçtir tam olarak ne olduğunu. Erlang veya başka bir dilde/ortamdaki probleminizin daha iyi performans çözümüne sahip olacağınızdan şüpheliyim. Yani R18 veya daha yeni kullandığınız zaman çözümünüz iyi olmalıdır.

+1

Sadece birkaç gün önce CodeMesh'te, Joe Armstrong her biri belirli bir zamanı uyuşan ve ardından tek bir MIDI notu çalan on binlerce işlemi yumurtlamaya bir örnek gösterdi. Mükemmel çalıştı! :-) – RichardC

+1

Teşekkürler, Hynek -Pichi- Vychodil. @RichardC Ben de test etmek için 10K zamanlayıcıları başlattım, hatta göz kırpmıyor. –

İlgili konular