7

İşte anladığım şey; lütfen düzeltin/ekleyin:Kullanıcı düzeyinde iş parçacıkları (ULT) ve çekirdek düzeyi iş parçacıkları (KLT) eşzamanlı yürütme açısından nasıl farklılıklar gösterir?

Saf ULT'lerde, çok iş parçacıklı işlemin kendisi iş parçacığı zamanlamasını yapar. Yani, çekirdek aslında farkını farketmez ve onu tek bir süreç olarak kabul eder. Bir iş parçacığı engelleme sistemi çağrısı yaparsa, tüm işlem engellenir. Çok çekirdekli bir işlemcide bile, işlem engellenmedikçe işlemin yalnızca bir iş parçacığı bir seferde çalışır. ULT'lerin ne kadar yardımcı olsa da emin değilim.

Saf KLT'lerde, bir iş parçacığı engellenmiş olsa bile, çekirdek aynı işlemin başka bir (hazır) iş parçacığı zamanlar. (Saf KLT'ler durumunda, çekirdeğin işlemin tüm iş parçacıklarını oluşturduğunu varsayıyorum.)

Ayrıca, ULT'ler ve KLT'lerin bir kombinasyonu kullanılarak, ULT'ler KLT'lere nasıl eşlenir?

cevap

17

Analizleriniz doğru. İşletim sistemi çekirdeğinin kullanıcı düzeyinde iş parçacıkları hakkında bilgisi yoktur. Bakış açısına göre bir süreç, zaman zaman sistem çağrıları yapan opak bir kara kutudır. Sonuç olarak, bu program 100.000 kullanıcı düzeyinde iş parçacığına sahipse ancak yalnızca bir çekirdek iş parçacığı varsa, bu işlem yalnızca bir kullanıcı düzeyinde iş parçacığı işleyebildiğinden, yalnızca bir tane çekirdek düzeyi iş parçacığı ilişkilendirilmiş olabilir. Öte yandan eğer bir işlem birden çok çekirdek seviyesinde iş parçacığı içeriyorsa, çok çekirdekli bir makine varsa paralel olarak çoklu komutları çalıştırabilir.

Bunlar arasında ortak bir uzlaşma, bir programın bazı sabit sayıda çekirdek düzeyi iş parçacığı isteğinde bulunması, daha sonra kendi iş parçacığı zamanlayıcılarının, kullanıcı düzeyinde iş parçacıklarını uygun şekilde bu çekirdek düzeyi iş parçacıklarına ayırmasıdır. Bu şekilde, çoklu ULT'ler paralel olarak yürütülür ve program, iş parçacığının nasıl çalıştığı konusunda ince ayarlı denetime sahip olabilir.

Bu eşlemenin nasıl çalıştığıyla ilgili olarak - bir dizi farklı şema vardır. Kullanıcı programının birden fazla farklı zamanlama sisteminden birini kullandığını hayal edebilirsiniz. Bu ikame yaparsanız Aslında,:

Çekirdek iplik < ---> İşlemci çekirdek

Kullanıcı iplik < ---> Çekirdek iplik

Sonra herhangi şema OS kullanabilirsiniz Çekirdek ipliklerini çekirdekler üzerinde eşlemek için, kullanıcı düzeyinde iş parçacıklarını çekirdek düzeyi iş parçacıklarına eşlemek için de kullanılabilir.

Bu yardımcı olur umarız!

+0

Ama bazı siteler ve kitaplar ULT multiprocessing yararlanmak edemez ve satırlardan birini söylemek "Öte yandan, bir süreç birden çekirdek düzeyinde konuları varsa, o zaman birden çok komut yürütebilirsiniz söylemek Çok çekirdekli bir makine varsa paralel. " Nerede yanlış gidiyorum? – Garrick

+0

Bunun için bir bağlantı sağlayabilir misiniz? Bu yanlış geliyor. – templatetypedef

+0

Lütfen şu 2 bağlantıyı kontrol edin: http://stackoverflow.com/questions/25582876/what-does-it-mean-by-user-threads-cannot-take-advantage-of-multithreading-or-mu ve http: // cs.stackexchange.com/questions/1065/what-is-the-difference-between-user-level-threads-and-kernel-level-threads. 2. linkin son satırı bunu söylüyor. Biraz daha araştırdım ve sanırım 1: 1 modele bağlı. Eğer büyük bir bilgi eksikse lütfen beni düzeltin. Teşekkürler !! – Garrick

2

Başka bir şeyden önce, templatetypedef'un cevabı güzel; Cevabını biraz uzatmak istedim.

ULT'nin ve KLT'nin'un: kombinasyonlarını biraz genişletme ihtiyacını hissettiğim bir alan var. Önemi (hybrid threading nolu Vikipedi etiketleri) anlamak için aşağıdaki örnekleri dikkate alın:

Kullanılabilir mantıksal çekirdeklerden daha fazla KLT'nin bulunduğu çok iş parçacıklı bir program (çoklu KLT'ler) düşünün. Her çekirdeği verimli bir şekilde kullanabilmeniz için, programlayıcının KLT'leri, hazır durumda olan ve engellemeyenlerle engellemesini istemiş olursunuz. Bu, çekirdeğin boşta kalma süresini azaltmasını sağlar. Ne yazık ki, KLT'leri değiştirmek programlayıcı için pahalıdır ve nispeten yüksek miktarda CPU zamanı tüketir.

Karma iş parçacığının yardımcı olabileceği bir alandır. Çoklu KLT'ler ve ULT'ler ile çok iş parçacıklı bir program düşünün. templatetypedef'un da belirttiği gibi, her KLT için bir seferde sadece bir ULT çalışmaktadır. Bir ULT engelleniyorsa, hala engellemeyen biri için onu değiştirmek istiyoruz. Neyse ki, ULT'ler, bir ULT'ye daha az kaynak verildiği ve çekirdek programlayıcıyla hiçbir etkileşim gerektirmediği için, KLT'lerden çok daha hafiftir. Esas olarak, ULT'leri KLT'leri değiştirmek olduğundan daha fazla değiştirmek her zaman daha hızlıdır. Sonuç olarak, ilk örneğe göre çekirdek boşta kalma süresini önemli ölçüde azaltabiliyoruz. Şimdi, elbette, bunların hepsi, ULT'lerin uygulanması için kullanılan diş açma kitaplığına bağlıdır. ULT'leri KLT'lere "haritalamak" için iki yol var

  1. tüm KLT en

    Bu durum için ULT en bir araya gelerek bir paylaşımlı bellek sistemi üzerinde idealdir. Temel olarak, her KLT'nin erişebileceği ULT'lerin bir "havuzu" vardır. İdeal olarak, iş parçacığı kitaplığı zamanlayıcısı, KLT'nin havuza tek tek erişmesinin aksine, istek üzerine her KLT'ye ULT atayacaktır. Daha sonra, kilitlerle veya benzer bir kilitle uygulanmadığı takdirde, yarış koşullarına veya kilitlenmelere neden olabilir.

  2. her KLT (Qthreads)

    Bu durum dağıtılmış bellek sistemi üzerinde idealdir için ULT en koleksiyonu. Her KLT'nin çalışması için bir ULT koleksiyonu vardır. Geri çekme, kullanıcının (ya da iplik kütüphanesinin) ULT'leri KLT'ler arasında bölmek zorunda kalacağıdır. Bu, tüm ULT'lerin aynı miktarda işi tamamlamak ve tamamlamak için aynı miktarda çalışmaya sahip olacağının garanti edilmemesi nedeniyle yük dengesizliğine yol açabilir. Bunun çözümü, ULT göçüne izin veriyor; Yani, ULT'nin KLT'ler arasında geçişi.

+0

"Hibrid iş parçacığı" uygulayan diğer örnek kitaplıklar/API'ları arıyorum. Herhangi biri bilen varsa, bunları başkalarına uzun yazmak için yazdığınız acı için yorumda bulunun veya bunları düzenleyin. –

+0

+1. Pthread kütüphanesi hibrid iş parçacığının bir örneği değil mi? –

+0

Orijinal Linux PThreads kitaplığının yanı sıra IBM destekli önerilen NGPT (Yeni Nesil POSIX Konuları), m: n threading uygulamalarıydı.Bununla birlikte, Linus Torvalds, eğer Linux çekirdeği iplikleri çok şişirilmişse, doğru çözüm, kullanıcı alanında en üstte karmaşıklık katmak değil, onları daha yalın ve daha hızlı hale getirmek değil, aynı zamanda mevcut NPTL'yi (Yerel 1: 1 kütüphane olan POSIX Threading Library) kazandı. BEAM Erlang VM'de, CPU çekirdeği başına bir VM ateşlenir, her biri ayrı bir iş parçacığında ve Erlang süreçleri aralarında zamanlanır. –

İlgili konular