Bir iş parçacığı havuzu nedir?


62

Bir threadpool nasıl uygulanır? "Threadpool" için wikipedia okudum, ancak hala bu soruyu çözmek için ne yapması gerektiğine karar veremiyorum (muhtemelen bir threadpool'un basit anlamda ne olduğunu tam olarak anlamadım çünkü).

Birisi bana ne tür bir ipucu olduğunu açık bir şekilde açıklayabilir ve bu soruya nasıl cevap verilir?

Yanıtlar:


96

Bir iş parçacığı havuzu, iş vermeye hazır duran önceden başlatılmış, boşta iş parçacığı grubudur. Bunlar, az sayıda uzun iş yerine çok sayıda kısa iş yapılması durumunda, her iş için yeni iş parçacıklarının başlatılması yerine tercih edilir. Bu, çok sayıda kez bir diş oluşturma ek yükünün üstesinden gelmek zorunda kalmayı önler.

Uygulama, çevreye göre değişecektir, ancak basitleştirilmiş olarak, aşağıdakilere ihtiyacınız vardır:

  • Konu oluşturmanın ve onları boşta tutmanın bir yolu. Bu, her ipliğin havuz çalışana kadar bir bariyerde bekletilmesiyle sağlanabilir. (Bu, mutekslerle de yapılabilir.)
  • Kuyruk veya havuza iş parçacığı eklemenin bir yolu olan başka bir yapı gibi oluşturulan iş parçacıklarını depolamak için bir kap.
  • İş yaparken kullanılacak dişler için standart bir arayüz veya soyut bir sınıf. Bu , işi yapan ve ardından geri dönen Taskbir execute()yöntemle adlandırılan soyut bir sınıf olabilir .

İş parçacığı havuzu oluşturulduğunda, kullanılabilir duruma getirmek için belirli sayıda iş parçacığını başlatır veya uygulamanın gereksinimlerine bağlı olarak gerektiğinde yenilerini oluşturur.

Havuz a verildiğinde Task, konteynırdan bir iplik alır (veya konteynır boşsa birinin hazır olmasını bekler), Taskittirir ve bariyeri karşılar. Bu, boşta iş parçacığının yürütmeye devam etmesine neden olur ve bunun execute()yöntemini çağırır Task. Uygulama tamamlandığında, iplik tekrar kullanmak üzere kaba geri konulacak havuza geri döner ve daha sonra döngü tekrarlanıncaya kadar uyku moduna geçerek bariyerini karşılar.


19
Bir iş parçacığı havuzu, iş vermeye hazır duran önceden başlatılmış, boşta iş parçacığı grubudur. [...] Bu, çok sayıda kez iplik oluşturma yükünün üstesinden gelmek zorunda kalmamakta. - birisi "havuz havuzu" için arama yaptığında bu Google tarafından tükürmek gerekir
Rafael Eyng

İş parçacığı havuzu oluşturma dahili olarak bir engel içeriyor mu? Referansı bu satırlarda paylaşabilir misiniz?
aşırı değişim

@overexchange Hayır, yok. Bu soruya atıfta bulunmam , bariyer sorunuzu yeniden yazmak için daha iyi bir yol örneği idi . (
Yaparsanız,

En iyi kısa cevaplardan biri.
Blood-HaZaRd

10

İş parçacığı havuzu, genellikle bir kuyrukta düzenlenen ve görev kuyruğundaki görevleri yürüten bir yönetilen iş parçacığı koleksiyonudur.

Zaman uyumsuz olarak yürütülecek bir şeye ihtiyacınız olduğunda yeni bir iş parçacığı nesnesi oluşturmak pahalıdır. Bir iş parçacığı havuzunda, görev sırasına zaman uyumsuz olarak yürütülmesini istediğiniz görevleri eklersiniz ve iş parçacığı havuzu, ilgili görev için uygun bir iş parçacığı atamakla ilgilenir. Görev tamamlanır tamamlanmaz, mevcut iş parçacığı başka bir görev ister (solda olduğu varsayılarak).

İş parçacığı havuzu, gerçekten gerekenden daha fazla iş parçacığı oluşturmaktan veya yok etmekten kaçınmanıza yardımcı olur.

Bir kuyruk sırası ve görev sırası içeren bir sınıf oluşturarak başlardım. Sonra görev kuyruğuna bir görev ekleyen ve oradan devam eden bir yöntem uygulayın. Açıkça, bir iş parçacığı havuzunda izin verilen maksimum iş parçacığı ayarlamayı da mümkün kılmalısınız.


1

Çok iş parçacıklı uygulamada, iş parçacığı havuzu, uygulamanız tarafından kullanılabilecek bir "kullanılabilir iş parçacığı havuzu" dir. Genellikle, örneğin .NET, hepsi yönetilir, böylece yalnızca görevler atarsınız ve bir konu serbest bırakıldığında, bunu gerçekleştirir. Bu yüzden bir iş parçacığı havuzu uygulamak için, her iş için açık iş parçacığı oluşturma olmadan görevlerin otomatik olarak serbest iş parçacığı tarafından alındığı bir konsept yaratmayı beklerdim.


1

Gerçek Hayat Örneği;

  1. Tesis: İşletim sistemi
  2. Bölümler: Uygulamalar
  3. İnsanlar: Konular

Orada bir tesisiniz var, 12 kişi çalışıyor. Bu tesisin 3 bölümü vardır. Mutfak, tuvalet ve güvenlik. İş parçacığı havuzu tekniğini kullanmazsanız, işte böyle çalışır: 12 müşterinin tümü bir toplantı odasında durur, eğer yeni müşteriler tesise gelirse ve görev isterse, o zaman insanları gruplara ayırır ve işlerini yapmaları için gönderirsiniz. ve toplantı odasına geri dön. Ancak, görevlerine başlamadan önce bir hazırlık aşaması var. Doğru üniforma giymeleri, bazı cihazları donatmaları ve bu bölüme yürümeleri, işleri bitirmeleri ve geri dönmeleri gerekir. Bu yüzden, işlerini her bitirdiklerinde (iş parçacığı sona erdiğinde), toplantı odasına geri dönmeleri, üniformalarını çıkarmaları, ekipmanları çıkarmaları ve bir sonraki iş için beklemeleri gerekir. Bunlar, iş parçacığı bağlamı oluşturma, bellek ayırma ve işletim sistemi tarafından izleme bilgilerini ifade eder.

İplik havuzu kullanıyorsanız, sabahın erken saatlerinde mutfağa 6 kişi, tuvalete 2 kişi ve güvenlik için 4 kişi atarsınız. Bu yüzden hazırlıklarını günde sadece bir kez yapacaklar. Mutfakta müşteri olmasa bile, bu 4 kişi gelecek görevler için boşta olacak. Mutfak kapanana kadar toplantı salonuna geri dönmeleri gerekmez (uygulama biter). Bu 4 kişi Mutfak uygulama havuzunda ve hızlı bir şekilde hizmet vermeye hazır. Ancak, tüm gün çalıştıkları için söz veremezsiniz çünkü mutfak zaman zaman boşta kalabilir. Aynı mantık, tuvaletler ve güvenlik için de geçerlidir.

İlk senaryoda, herhangi bir iş için herhangi bir iş parçacığını boşa harcamazsınız, ancak her iş parçacığı için her bir iş parçacığını hazırlamak iyi zaman alacaktır. İkincisinde, konuları önceden hazırlarsınız, bu nedenle tüm görevler için tüm başlıkları kullanacağınızı garanti edemezsiniz, ancak işletim sistemi çoğunlukla üzerinde büyük bir optimizasyon yapar, böylece güvenle kullanabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.