Visual Basic'te iş parçacığı tanıtımı

VB.NET'te diş açmayı anlamak, bazı temel kavramları anlamaya yardımcı olur. Birincisi, iş parçacığı işletim sistemi tarafından desteklendiği için gerçekleşen bir şeydir. Microsoft Windows, önleyici çok görevli bir işletim sistemidir. Windows'un görev zamanlayıcısı olarak adlandırılan bir kısmı, çalışan tüm programlara işlemci zamanını koyar. İşlemci zamanının bu küçük parçalarına zaman dilimleri denir. Programlar, ne kadar işlemci süresi aldıklarından sorumlu değildir, görev zamanlayıcısıdır. Bu zaman dilimleri çok küçük olduğundan, bilgisayarın aynı anda birkaç şey yaptığı yanılsamasını alırsınız.

Thread'un tanımı

Bir iplik tek bir ardışık kontrol akışıdır.

Bazı niteleyiciler:

  • Bir iş parçacığı, bu kod gövdesi boyunca bir "yürütme yolu" dur.
  • İş parçacıkları hafızayı paylaşır, böylece doğru sonucu elde etmek için işbirliği yapmaları gerekir.
  • Bir iş parçacığında yazmaçlar, yığın işaretçisi ve program sayacı gibi iş parçacığına özgü veriler bulunur.
  • Bir işlem, çok sayıda iş parçacığına sahip olabilen tek bir kod gövdesidir, ancak en az bir tane ve tek bir bağlamı (adres alanı) vardır.
instagram viewer

Bu, montaj düzeyindeki şeylerdir, ancak konuları düşünmeye başladığınızda içine girersiniz.

Çok iş parçacığına karşı Çoklu İşlem

Çok iş parçacığı çok çekirdekli paralel işleme ile aynı değildir, ancak çok iş parçacıklı ve çok işlemli birlikte çalışır. Günümüzde çoğu bilgisayarda en az iki çekirdeğe sahip işlemciler vardır ve sıradan ev makinelerinde bazen sekiz çekirdeğe kadar bulunur. Her çekirdek, kendi başına programları çalıştırabilen ayrı bir işlemcidir. İşletim sistemi farklı çekirdeklere farklı bir işlem atadığında performans artışı elde edersiniz. Daha da yüksek performans için birden çok iş parçacığı ve birden çok işlemci kullanımına iş parçacığı düzeyinde paralellik denir.

Yapılacak çok şey, işletim sisteminin ve işlemci donanımının neler yapabileceğine bağlıdır. her zaman programınızda neler yapabileceğinizi ve üzerinde birden fazla iş parçacığı kullanmayı beklememelisiniz herşey. Aslında, birden fazla iş parçacığından yararlanan birçok sorun bulamayabilirsiniz. Bu nedenle, sadece orada olduğu için çoklu iş parçacığı uygulama. Çok iş parçacığı için iyi bir aday değilse, programınızın performansını kolayca düşürebilirsiniz. Örnek olarak, video codec bileşenleri çok veri için en kötü programlar olabilir, çünkü veriler doğal olarak seri. Web sayfalarını işleyen sunucu programları en iyileri arasında olabilir çünkü farklı istemciler doğal olarak bağımsızdır.

İş Parçacığı Güvenliğini Uygulama

Çok iş parçacıklı kod genellikle iş parçacıklarının karmaşık koordinasyonunu gerektirir. İnce ve bulunması zor hatalar yaygındır, çünkü farklı evreler genellikle aynı verileri paylaşmak zorundadır, böylece başka bir veri beklemediğinde veriler bir evre tarafından değiştirilebilir. Bu sorunun genel terimi "ırk durumu" dur. Diğer bir deyişle, iki evre aynı verileri güncellemek için bir "yarış" a girebilir ve sonuç hangi evrenin "kazandığına" bağlı olarak farklı olabilir. Önemsiz bir örnek olarak, bir döngüyü kodladığınızı varsayın:

Döngü sayacı "I" beklenmedik bir şekilde 7 sayısını kaçırır ve 6'dan 8'e gider - ancak sadece bir süre için - döngü ne yaparsa yapsın feci etkileri olur. Bunun gibi sorunların önlenmesine iplik güvenliği denir. Program daha sonraki bir işlemde bir işlemin sonucuna ihtiyaç duyuyorsa, bunu yapmak için paralel işlemleri veya iş parçacıklarını kodlamak imkansız olabilir.

Temel Çok İş Parçacıklı İşlemler

Bu ihtiyati konuşmayı arka plana aktarmanın ve çok iş parçacıklı kod yazmanın zamanı geldi. Bu makalede, şu anda basitlik için bir Konsol Uygulaması kullanılmaktadır. Takip etmek isterseniz, Visual Studio'yu yeni bir Konsol Uygulaması projesiyle başlatın.

Birden çok iş parçacığı tarafından kullanılan birincil ad alanı Sistem'dir. İş parçacığı ad alanı ve Thread sınıfı yeni iş parçacıkları oluşturur, başlatır ve durdurur. Aşağıdaki örnekte, TestMultiThreading öğesinin bir temsilci olduğuna dikkat edin. Yani, Thread yönteminin çağırabileceği bir yöntemin adını kullanmanız gerekir.

Bu app, biz sadece arayarak ikinci Sub yürütmüş olabilir:

Bu, tüm uygulamayı seri şekilde yürütürdü. Ancak, yukarıdaki ilk kod örneği TestMultiThreading alt yordamını başlatır ve sonra devam eder.

Özyinelemeli Bir Algoritma Örneği

İşte bir özyinelemeli algoritma kullanarak bir dizinin permütasyonlarının hesaplanmasını içeren çok iş parçacıklı bir uygulama. Kodun tamamı burada gösterilmemiştir. İzin verilen karakter dizisi basitçe "1," "2," "3," "4" ve "5" tir. İşte kodun ilgili kısmı.

Permute altını çağırmanın iki yolu olduğuna dikkat edin (her ikisi de yukarıdaki kodda yorumlanmıştır). Biri bir iş parçacığını başlatır ve diğeri doğrudan onu çağırır. Doğrudan ararsanız, şunları elde edersiniz:

Ancak, bir iş parçacığını başlatır ve bunun yerine Permute altını başlatırsanız, şunları elde edersiniz:

Bu, en azından bir permütasyonun üretildiğini açıkça gösterir, daha sonra Ana alt ilerler ve bitirir. Ekran Permute alt tarafından adlandırılan ikinci bir alt öğeden geldiğinden, bunun yeni iş parçacığının bir parçası olduğunu da bilirsiniz. Bu, bir iş parçacığının daha önce belirtildiği gibi "bir yürütme yolu" olduğu kavramını göstermektedir.

Yarış Durumu Örneği

Bu makalenin ilk bölümünde bir yarış durumu belirtilmiştir. İşte doğrudan gösteren bir örnek:

Anında penceresi bu sonucu bir denemede gösterdi. Diğer denemeler farklıydı. Bu bir yarış koşulunun özüdür.

instagram story viewer