Aracılığıyla paylaş


İşlemler, İş Parçacıkları ve Daireler

işlem, sanal bellek alanı, kod, veri ve sistem kaynaklarından oluşan bir koleksiyondur. iş parçacığı, bir işlem içinde seri olarak yürütülecek koddur. İşlemci işlemleri değil iş parçacıklarını yürütür, bu nedenle her uygulamanın en az bir işlemi vardır ve bir işlem her zaman birincil iş parçacığı olarak bilinen en az bir yürütme iş parçacığına sahiptir. Bir işlemin birincil iş parçacığına ek olarak birden çok iş parçacığı olabilir.

İşlemler, Microsoft'un Uzaktan Yordam Çağrısı (RPC) teknolojisini kullanarak birbiriyle iletilerle iletişim kurar ve bilgileri birbirine geçirir. Arayan için uzak makinedeki bir işlemden gelen çağrı ile aynı makinedeki başka bir işlemden gelen çağrı arasında bir fark yoktur.

bir iş parçacığı yürütülmeye başladığında, sonlandırılana kadar veya daha yüksek önceliğe sahip bir iş parçacığı (kullanıcı eylemi veya çekirdeğin iş parçacığı zamanlayıcı tarafından) tarafından kesintiye uğrayana kadar devam eder. Her iş parçacığı kodun ayrı bölümlerini çalıştırabilir veya birden çok iş parçacığı kodun aynı bölümünü yürütebilir. Aynı kod bloğunu yürüten iş parçacıkları ayrı yığınlar tutar. Bir işlemdeki her iş parçacığı, işlemin genel değişkenlerini ve kaynaklarını paylaşır.

İş parçacığı zamanlayıcı, işlemin öncelik sınıfı özniteliği ve iş parçacığının temel önceliğinin bir bileşimine göre bir iş parçacığının ne zaman ve ne sıklıkta yürütüleceğini belirler. SetPriorityClass işlevini çağırarak bir işlemin öncelik sınıfı özniteliğini ayarlarsınız ve SetThreadPriorityçağrısıyla iş parçacığının temel önceliğini ayarlarsınız.

Çok iş parçacıklı uygulamalar iki iş parçacığı sorununu önlemelidir: kilitlenmeleri ve yarışları. Her iş parçacığı diğerinin bir şey yapması için beklerken kilitlenme oluşur. COM çağrı denetimi, nesneler arasındaki çağrılarda kilitlenmelerin önlenmesine yardımcı olur. Yarış durumu, bir iş parçacığının bağımlı olduğu başka bir iş parçacığından önce bitirildiğinde oluşur ve ikincisi henüz geçerli bir değer sağlanmadığından ilkinin başlatılmamış bir değer kullanmasına neden olur. COM, işlem dışı sunucularda yarış koşullarını önlemeye yardımcı olmak için özel olarak tasarlanmış bazı işlevler sağlar. (bkz. İşlem Dışı Sunucu Uygulama Yardımcıları.)

Daire ve COM İş Parçacığı Mimarisi

COM, birden çok yürütme iş parçacığının kullanıma sunulmasından önce işlem başına tek iş parçacığı modeli yaygın olarak desteklese de, birden çok iş parçacığından yararlanmak için kod yazabilir ve bir iş parçacığının yürütülmesine izin vererek daha verimli uygulamalar elde edebilir ve başka bir iş parçacığı biraz zaman alan işlemin tamamlanmasını bekler.

Not

Birden çok iş parçacığı kullanmak daha iyi bir performans garantisi değildir. Aslında, iş parçacığı çarpanları zor bir sorun olduğundan, birden çok iş parçacığı kullanmak genellikle performans sorunlarına neden olur. Anahtar, yalnızca ne yaptığınızdan çok eminseniz birden çok iş parçacığı kullanmaktır.

 

Genel olarak, COM iş parçacığı mimarisini görüntülemenin en basit yolu, işlemdeki tüm COM nesnelerini dairelerolarak adlandırılan gruplara ayrılmış olarak düşünmektir. COM nesnesi, yöntemlerinin yasal olarak yalnızca o daireye ait bir iş parçacığı tarafından doğrudan çağrılabileceği anlamda, tam olarak tek bir dairede yaşar. Nesneyi çağırmak isteyen diğer tüm iş parçacıkları bir ara sunucu üzerinden geçmelidir.

İki tür daire vardır: tek iş parçacıklı dairelerve çok iş parçacıklı daireler.

  • Tek iş parçacıklı daireler tam olarak bir iş parçacığından oluşur, bu nedenle tek iş parçacıklı bir dairede yaşayan tüm COM nesneleri, yalnızca o daireye ait olan bir iş parçacığından yöntem çağrıları alabilir. Tek iş parçacıklı bir dairede COM nesnesine yapılan tüm yöntem çağrıları, tek iş parçacıklı dairenin iş parçacığı için windows ileti kuyruğuyla eşitlenir. Tek bir yürütme iş parçacığına sahip bir işlem, yalnızca bu modelin özel bir örneğidir.
  • Çok iş parçacıklı daireler bir veya daha fazla iş parçacığından oluşur, bu nedenle çok iş parçacıklı bir dairede yaşayan tüm COM nesneleri, çok iş parçacıklı daireye ait iş parçacıklarından doğrudan yöntem çağrıları alabilir. Çok iş parçacıklı bir apartmandaki iş parçacıkları, serbest iş parçacığı oluşturma adlı bir model kullanır. Çok iş parçacıklı bir dairede COM nesnelerine yapılan çağrılar, nesnelerin kendileri tarafından eşitlenir.

Not

Aynı işlem içindeki tek iş parçacıklı dairelerle çok iş parçacıklı daireler arasındaki iletişimin açıklaması için bkz. Single-Threaded ve Çok İş Parçacıklı İletişim.

 

Bir işlem sıfır veya daha fazla tek iş parçacıklı daireye ve sıfır veya bir çok iş parçacıklı daireye sahip olabilir.

Bir süreçte, ana daire ilk başlatılacak olan dairedir. Tek iş parçacıklı bir işlemde, bu tek dairedir. Çağrı parametreleri daireler arasında sıralanır ve COM eşitlemeyi mesajlaşma aracılığıyla işler. Bir işlemde serbest iş parçacıklı olacak birden çok iş parçacığı belirlerseniz, tüm boş iş parçacıkları tek bir dairede bulunur, parametreler doğrudan dairedeki herhangi bir iş parçacığına geçirilir ve tüm eşitlemeyi işlemeniz gerekir. Hem serbest iş parçacıklı hem de daire iplikli bir işlemde, tüm ücretsiz dişler tek bir dairede yer alır ve diğer tüm daireler tek dişli dairelerdir. COM çalışması yapılan bir süreç, en fazla bir çok iş parçacıklı daireye ancak herhangi bir sayıda tek iş parçacıklı daireye sahip bir daire koleksiyonudur.

COM'daki iş parçacığı oluşturma modelleri, birlikte çalışmak üzere farklı iş parçacığı mimarileri kullanan istemciler ve sunucular için mekanizma sağlar. Farklı işlemlerde farklı iş parçacığı oluşturma modellerine sahip nesneler arasındaki çağrılar doğal olarak desteklenir. Çağıran nesnenin perspektifinden bakıldığında, çağrılan nesnenin iş parçacığı nasıl olursa olsun, bir işlem dışındaki nesnelere yapılan tüm çağrılar aynı şekilde davranır. Benzer şekilde, çağrılan nesnenin perspektifinden gelen çağrılar, çağıranın iş parçacığı modelinden bağımsız olarak aynı şekilde davranır.

İstemci ve nesne farklı işlemlerde olduğundan, farklı iş parçacığı modelleri kullandıklarında bile, bir istemci ile işlem dışı nesne arasındaki etkileşim basittir. İstemci ile sunucu arasında bir araya gelen COM, standart hazırlama ve RPC kullanarak iş parçacığı modellerinin birlikte çalışması için kod sağlayabilir. Örneğin, tek iş parçacıklı bir nesne birden çok serbest iş parçacıklı istemci tarafından aynı anda çağrılırsa, çağrılar sunucunun ileti kuyruğuna karşılık gelen pencere iletileri yerleştirilerek COM tarafından eşitlenir. Nesnenin dairesi, iletileri her aldığında ve gönderişinde bir çağrı alır. Ancak, işlem içi sunucuların istemcileriyle düzgün bir şekilde etkileşime alındığından emin olmak için bazı özen gösterilmelidir. (Bkz. In-Process Sunucu İş Parçacığı Oluşturma Sorunları.)

Çok iş parçacıklı bir modelle programlamada en önemli sorun, kodunuzun iş parçacığını güvenli hale getirerek belirli bir iş parçacığına yönelik iletilerin yalnızca bu iş parçacığına gitmesini ve iş parçacıklarına erişimin korunmasını sağlamaktır.

Daha fazla bilgi için aşağıdaki konulara bakın: