SORU
30 Mart 2011, ÇARŞAMBA


Neden bir iş Parçacığı pahalı olduğu söyleniyor yaratıyor?

Java öğreticiler bir iş Parçacığı oluşturma pahalı olduğunu söylüyorlar. Ama tam olarak neden pahalı? Tam bir Java iş Parçacığı oluşturma pahalı kılan oluşturulduğunda neler oluyor? Doğru olarak ifade alıyorum, ama sadece JVM iş Parçacığı oluşturma mekaniği ile ilgileniyorum.

İplik ömrü yükü. İş parçacığı oluşturma ve enkaz ücretsiz DEĞİLDİR. Gerçek havai platformlar arasında değişir, ancak iş parçacığı oluşturma zamanı, isteği işleme içine gecikme tanıtılması ve bazı işleme aktivite gerektirir JVM ve işletim sistemi tarafından alır. Eğer istekleri çoğu sunucu uygulamaları gibi sık ve hafif, her istek için yeni bir iş parçacığı oluşturma önemli bilgisayar kaynaklarını tüketir.

DanUygulamada Java Eşzamanlılık
Brian Goetz Tarafından, Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes, Doug Lea
Baskı ISBN-10: 0-321-34960-1

CEVAP
30 Mart 2011, ÇARŞAMBA


Java iş parçacığı oluşturma çalışmasının adil bir bit vardır, çünkü pahalı

  • Büyük bir bellek bloğu ve iş parçacığı yığın için ayrılan başlatıldı.
  • Sistem çağrıları / register ana işletim sistemi ile yerel iş parçacığı oluşturmak için yapılması gerekir.
  • Tanımlayıcıları oluşturulacak ve iç veri yapıları JVM için başlatılan ekledi ihtiyacı var.

Bu da pahalı öyle iplik bağlıyor kaynakları sürece bu hayatta; örneğin iş parçacığı yığın, herhangi bir nesne erişilebilir gelen yığın, JVM iş parçacığı tanımlayıcısı, işletim sistemi yerel iş parçacığı tanımlayıcısı.

Tüm bunları belirli bir platform, ama şimdiye kadar karşılaştığım herhangi bir Java platformu üzerinde değil ucuz.


Bir Google Arama beni ~4000 iş parçacığı oluşturma oranı raporları old benchmark 2002 vintage çift işlemci, Sun Java saniyede 1.4.1 " çok çekirdekli bir 2002 vintage Linux koşarken buldum. Daha modern bir platform daha iyi numaralar verecek ... ve metodoloji hakkında yorum yapamam. ama en azından bir ballpark verirne kadar pahalıiş parçacığı oluşturma olasılığı yüksektir.

Peter Lawrey bu kıyaslama gösteren iş parçacığı oluşturma önemli ölçüde daha hızlı bu günlerde mutlak şart, ama bu belirsiz ne kadar bu gelişmeler nedeniyle Java ve/veya işletim sistemi ... ya da daha hızlı işlemci hızları. Ama onun numaralarıhala150/oluşturma karşı bir iş parçacığı havuzu iş parçacığı her zaman yeni bir başlangıç kullanırsanız kat gelişim gösterir. (Ve bu tamamen göreceli olduğu nokta ...) yapar


(Yukarıdaki varsayar "yerel iş parçacığı" yerine "Yeşil iş", ama modern Jvm'ler tüm kullanım performansı artırmak için yerel iş parçacığı. YEŞİL iş parçacığı oluşturmak için belki daha ucuz, ama diğer alanlarda bunun için ödeme yaparsınız.)


Kazma biraz iş parçacığı yığınının bir Java gerçekten ayrılmış nasıl olur görmek için yaptım. Linux üzerinde OpenJDK 6 durumunda iş parçacığı ana iş parçacığı oluşturur pthread_create çağrısı tarafından ayrılan yığın. (JVM pthread_create ön tahsis yığını geçmez.)

Sonra, pthread_create içinde yığın aşağıdaki gibi: mmap için bir çağrı tarafından tahsis edilir

mmap(0, attr.__stacksize, 
     PROT_READ|PROT_WRITE|PROT_EXEC, 
     MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)

man mmap, MAP_ANONYMOUS bayrağı göre nedenleri sıfır başlatılması için bellek.

Yeni Java iş parçacığı yığın sıfırlı gerekli olmayabilir olsa bile, bu nedenle, (JVM spec başına), pratikte (en azından Linux üzerinde OpenJDK 6) sıfırlanmış.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Joshua Bane

    Joshua Bane

    24 Temmuz 2007
  • Kenneth Håkonsen

    Kenneth Håk

    13 Mart 2011
  • sghaff1

    sghaff1

    23 Mart 2009