Python'da Eş Zamanlılık - Giriş

Bu bölümde, Python'da eşzamanlılık kavramını anlayacak ve farklı iş parçacıkları ve süreçler hakkında bilgi edineceğiz.

Eşzamanlılık nedir?

Basit bir deyişle, eşzamanlılık, aynı anda iki veya daha fazla olayın meydana gelmesidir. Eşzamanlılık doğal bir fenomendir çünkü birçok olay herhangi bir zamanda aynı anda meydana gelir.

Programlama açısından, eşzamanlılık, iki görevin yürütülürken çakışmasıdır. Eşzamanlı programlama ile uygulamalarımızın ve yazılım sistemlerimizin performansı iyileştirilebilir, çünkü bir öncekinin tamamlanmasını beklemek yerine isteklerle eşzamanlı olarak ilgilenebiliriz.

Eş Zamanlılığın Tarihsel İncelemesi

Aşağıdaki noktalar bize eşzamanlılığın kısa bir tarihsel incelemesini verecektir -

Demiryolları konseptinden

Eşzamanlılık, demiryolları kavramı ile yakından ilgilidir. Demiryolları ile, aynı demiryolu sistemi üzerinde birden çok trenin, her trenin varış noktasına güvenli bir şekilde varacağı şekilde idare edilmesi gerekiyordu.

Akademide eşzamanlı bilgi işlem

Bilgisayar bilimi eşzamanlılığına ilgi 1965 yılında Edsger W. Dijkstra tarafından yayınlanan araştırma makalesi ile başladı. Bu yazıda, eşzamanlılık kontrolünün özelliği olan karşılıklı dışlama sorununu belirledi ve çözdü.

Üst düzey eşzamanlılık ilkelleri

Son zamanlarda, programcılar üst düzey eşzamanlılık ilkellerinin ortaya çıkması nedeniyle gelişmiş eşzamanlı çözümler alıyorlar.

Programlama dilleriyle geliştirilmiş eşzamanlılık

Google'ın Golang, Rust ve Python gibi programlama dilleri, daha iyi eşzamanlı çözümler elde etmemize yardımcı olan alanlarda inanılmaz gelişmeler kaydetti.

İş parçacığı ve çok iş parçacığı nedir?

Threadbir işletim sisteminde gerçekleştirilebilecek en küçük yürütme birimidir. Kendi başına bir program değildir, ancak bir program içinde çalışır. Başka bir deyişle, ipler birbirinden bağımsız değildir. Her iş parçacığı, kod bölümünü, veri bölümünü vb. Diğer iş parçacıklarıyla paylaşır. Hafif işlemler olarak da bilinirler.

Bir iş parçacığı aşağıdaki bileşenlerden oluşur -

  • Bir sonraki çalıştırılabilir talimatın adresinden oluşan program sayacı

  • Stack

  • Kayıt seti

  • Benzersiz bir kimlik

MultithreadingÖte yandan, bir CPU'nun aynı anda birden fazla iş parçacığı çalıştırarak işletim sistemi kullanımını yönetme yeteneğidir. Çoklu okumanın ana fikri, bir süreci birden fazla iş parçacığına bölerek paralellik sağlamaktır. Çoklu okuma kavramı aşağıdaki örnek yardımıyla anlaşılabilir.

Misal

İçeriği yazmak için MS Word'ü açtığımız belirli bir işlemi yürüttüğümüzü varsayalım. MS Word'ü açmak için bir iş parçacığı atanacak ve içeriğin yazılması için başka bir iş parçacığı gerekli olacaktır. Ve şimdi, mevcut olanı düzenlemek istersek, düzenleme görevini yapmak için başka bir iş parçacığı gerekecektir.

Süreç ve çoklu işlem nedir?

Birprocesssistemde uygulanacak temel iş birimini temsil eden bir varlık olarak tanımlanır. Basit bir ifadeyle bilgisayar programlarımızı bir metin dosyasına yazıyoruz ve bu programı çalıştırdığımızda programda bahsedilen tüm görevleri yerine getiren bir işlem haline geliyor. Süreç yaşam döngüsü boyunca farklı aşamalardan geçer - Başlatma, Hazırlık, Çalıştırma, Bekleme ve Sonlandırma.

Aşağıdaki şema, bir sürecin farklı aşamalarını göstermektedir -

Bir işlem, birincil evre olarak adlandırılan yalnızca bir iş parçacığına veya kendi kayıt kümelerine, program sayacına ve yığınına sahip birden çok iş parçacığına sahip olabilir. Aşağıdaki şema bize farkı gösterecektir -

Multiprocessing,Öte yandan, tek bir bilgisayar sistemi içinde iki veya daha fazla CPU biriminin kullanılmasıdır. Birincil hedefimiz, donanımımızdan tam potansiyeli elde etmektir. Bunu başarmak için, bilgisayar sistemimizde bulunan tam sayıda CPU çekirdeğini kullanmamız gerekir. Çoklu işlem, bunu yapmak için en iyi yaklaşımdır.

Python, en popüler programlama dillerinden biridir. Eşzamanlı uygulamalar için uygun kılan nedenlerden bazıları şunlardır -

Sözdizimsel şeker

Sözdizimsel şeker, şeyleri okumayı veya ifade etmeyi kolaylaştırmak için tasarlanmış bir programlama dili içindeki sözdizimidir. Dili insan kullanımı için daha "tatlı" kılar: şeyler daha net, daha özlü veya tercihe göre alternatif bir tarzda ifade edilebilir. Python, nesneler üzerinde hareket etmek için tanımlanabilen Magic yöntemleriyle birlikte gelir. Bu Magic yöntemleri, sözdizimsel şeker olarak kullanılır ve daha kolay anlaşılır anahtar kelimelere bağlıdır.

Geniş Topluluk

Python dili, yapay zeka, makine öğrenimi, derin öğrenme ve nicel analiz alanlarında çalışan veri bilimcileri ve matematikçiler arasında büyük bir benimsenme oranına tanık oldu.

Eşzamanlı programlama için faydalı API'ler

Python 2 ve 3, paralel / eşzamanlı programlama için ayrılmış çok sayıda API'ye sahiptir. Bunların en popülerlerithreading, concurrent.features, multiprocessing, asyncio, gevent and greenlets, vb.

Eşzamanlı uygulamaların uygulanmasında Python'un sınırlamaları

Python, eşzamanlı uygulamalar için bir sınırlama ile birlikte gelir. Bu sınırlama denirGIL (Global Interpreter Lock)Python içinde mevcuttur. GIL hiçbir zaman birden fazla CPU çekirdeği kullanmamıza izin vermez ve bu nedenle Python'da gerçek iş parçacığı olmadığını söyleyebiliriz. GIL kavramını şu şekilde anlayabiliriz -

GIL (Global Tercüman Kilidi)

Python dünyasındaki en tartışmalı konulardan biridir. CPython'da GIL mutekstir - işleri iş parçacığını güvenli kılan karşılıklı dışlama kilidi. Başka bir deyişle, GIL'in birden çok iş parçacığının Python kodunu paralel olarak çalıştırmasını engellediğini söyleyebiliriz. Kilit, bir seferde yalnızca bir iş parçacığı tarafından tutulabilir ve eğer bir iş parçacığı yürütmek istiyorsak, önce kilidi almalıdır. Aşağıda gösterilen şema, GIL'in çalışmasını anlamanıza yardımcı olacaktır.

Ancak, Python'da aşağıdaki gibi bazı kitaplıklar ve uygulamalar vardır: Numpy, Jpython ve IronPytbhon. Bu kitaplıklar GIL ile herhangi bir etkileşim olmadan çalışır.