Tarayıcınız Javascript Desteklemiyor! Neden Go Öğrenmelisin? | Zap Group Web Tasarım

Neden Go Öğrenmelisin?

Neden Go Öğrenmelisin?

Neden Go Öğrenmelisin?

Son birkaç yılda, yeni bir programlama dilinin yükselişi var: Go veya GoLang . Hiçbir şey bir geliştiriciyi yeni bir programlama dilden daha çılgına çevirmez, değil mi? Bu yüzden Go 4 ila 5 ay önce Go öğrenmeye başladım ve size bu yeni dili neden öğrenmeniz gerektiğini anlatacağım.

Bu makalede nasıl “Merhaba Dünya!” Yazabileceğinizi size öğretmeyeceğim. Bunun için çevrimiçi başka birçok makale var. Bilgisayar donanım yazılımının şu andaki aşamasını açıklayacağım ve neden Go gibi yeni bir dile ihtiyacımız var? Çünkü herhangi bir sorun yoksa, o zaman çözüme ihtiyacımız olmaz, değil mi?

 

DONANIM KISITLAMALARI

Moore kanunu başarısız oluyor.

3.0GHz saat hızında ilk Pentium 4 işlemci 2004 yılında Intel tarafından tanıtıldı . Bugün, Mackbook Pro 2016'daki saat hızı 2.9GHz. Bu yüzden, neredeyse on yılda, ham işlem gücünde çok fazla kazanç yoktur. İşlem gücünü arttırma zamanını aşağıdaki çizelgede görebilirsiniz.

 

işlemci saat hızı

Yukarıdaki tablodan tek iplik performansının ve işlemcinin sıklığının neredeyse on yıl boyunca sabit kaldığını görebilirsiniz. Daha fazla transistör eklemenin çözüm olduğunu düşünüyorsanız, yanılıyorsunuz. Bunun nedeni, daha küçük ölçekte bazı kuantum özelliklerin ortaya çıkmaya başlamasıdır (tünel açma gibi) ve aslında daha fazla transistör ( neden? ) Koymaktan daha pahalı olduğu ve dolar başına ekleyebileceğiniz transistör sayısının düşmeye başlamasıdır.

Yani, yukarıdaki sorunun çözümü için,

  • Üreticiler işlemciye daha fazla çekirdek eklemeye başladı. Günümüzde dört çekirdekli ve okta çekirdekli işlemcilerimiz var.
  • Ayrıca hiper iş parçacığı tanıttık.
  • Performansı artırmak için işlemciye daha fazla önbellek eklendi.

Ancak yukarıdaki çözümlerin de kendi sınırlamaları vardır. Önbellek fiziksel sınırlara sahip olduğundan performansı artırmak için işlemciye gittikçe daha fazla önbellek ekleyemiyoruz: önbellek büyüdükçe, yavaşlar. İşlemciye daha fazla çekirdek eklemenin de maliyeti var. Ayrıca, bu süresiz olarak ölçeklenemez. Bu çok çekirdekli işlemciler aynı anda birden fazla iş parçacığı çalıştırabilir ve bu da resme aynı anda eşlik eder. Sonra görüşürüz.

Dolayısıyla, donanım iyileştirmelerine güvenemezsek, devam etmenin tek yolu performansı artırmak için daha verimli bir yazılımdır. Fakat ne yazık ki, modern programlama dili pek verimli değil.

“Modern işlemciler nitro yakıtlı komik arabalardır, çeyrek milde mükemmeller. Maalesef, modern programlama dilleri Monte Carlo'ya benziyor, katlanmış ve dönüşlerle dolu. ”- David Ungar

 

GO GOROUTİNLERİ VAR!

Yukarıda tartıştığımız gibi, donanım üreticileri performansı artırmak için işlemcilere gittikçe daha fazla çekirdek ekliyorlar. Tüm veri merkezleri bu işlemciler üzerinde çalışıyor ve önümüzdeki yıllarda çekirdek sayısında artış beklemeliyiz. Dahası, günümüzün uygulamaları veritabanı bağlantılarını korumak, mesaj kuyrukları ve önbellekleri korumak için çoklu mikro servisleri kullanan uygulamalar. Bu yüzden geliştirdiğimiz yazılım ve programlama dilleri eşzamanlılığı kolayca desteklemeli ve artan sayıda çekirdekle ölçeklenebilir olmalıdır.

Ancak, modern programlama dillerinin çoğu (Java, Python vb.) 90'ların tek dişli ortamından gelmektedir.Bu programlama dillerinin çoğu çoklu iş parçacığını destekler. Ancak asıl sorun eşzamanlı yürütme, iş parçacığı kilitleme, yarış koşulları ve kilitlenmelerden kaynaklanıyor. Bu şeyler, bu dillerde çok iş parçacıklı bir uygulama oluşturmayı zorlaştırıyor.

Örneğin, Java'da yeni iş parçacığı oluşturmak bellek etkin değildir. Her iş parçacığı yaklaşık 1 MB'lık bellek yığınını kullandığından ve sonunda binlerce iplik eğirmeye başlarsanız, yığın üzerine büyük bir baskı uygular ve bellek yetersizliğinden kapanmaya neden olur. Ayrıca, iki veya daha fazla iş parçacığı arasında iletişim kurmak istiyorsanız, çok zor.

Öte yandan, Go, 2009 yılında çok çekirdekli işlemciler zaten mevcut olduğunda piyasaya sürüldü. Bu yüzden Go, aynı anda akılda tutulmasıyla inşa edildi. Go iş parçacığı yerine goroutinleri vardır. Yığından yaklaşık 2 KB bellek tüketiyorlar. Böylece, istediğiniz zaman milyonlarca goroini döndürebilirsiniz.

 

goroutin

Diğer avantajlar:

  • Goroutinlerin yetiştirilebilir bölümlere sahip yığınları var. Bu, yalnızca gerektiğinde daha fazla hafıza kullanacakları anlamına gelir.
  • Goroutinler, iş parçacığından daha hızlı bir başlangıç ​​zamanına sahip.
  • Goroutinler, aralarında güvenli bir şekilde iletişim kurmak için yerleşik ilkellerle birlikte gelir (kanallar).
  • Goroutinler veri yapılarını paylaşırken muteks kilitlemeye başvurmaktan kaçınmanıza izin verir.
  • Ayrıca, goroutinler ve işletim sistemi konuları 1: 1 eşleştirmeye sahip değildir. Tek bir goroutine birden fazla iş parçacığı üzerinde çalışabilir. Goroutinler, az sayıda işletim sistemi dişine çoğaltılır.

Rob Pike'ın mükemmel konuşma eşzamanlılığının bu konuda daha derin bir anlayış elde etmek için paralellik olmadığını görebilirsiniz .

Yukarıdaki tüm noktalar, Go'yu Java, C ve C ++ gibi eşzamanlılıklarla başa çıkmak için çok güçlü kılar.

 

grafik

Git, her iki dünya için de iyi olur. Eşzamanlılığı yönetmek için eşzamanlı yazma ve verimli yazma

 

GO DOĞRUDAN TEMEL DONANIM ÜZERİNDE ÇALIŞIR.

Java / Python gibi diğer modern yüksek seviyeli dillere göre C, C ++ kullanmanın en büyük yararı performanslarıdır. Çünkü C / C ++ derlenmiş ve yorumlanmamış.

İşlemciler ikili dosyaları anlar. Genel olarak, projenizi derlerken Java veya diğer JVM tabanlı dilleri kullanarak bir uygulama oluşturduğunuzda, insan tarafından okunabilir kodu, JVM veya altta yatan işletim sistemi üzerinde çalışan diğer sanal makineler tarafından anlaşılabilecek bayt koduna derler. Yürütme sırasında VM bu bayt kodlarını yorumlar ve işlemcilerin anlayabileceği ikili dosyalara dönüştürür.

 

code

VM tabanlı diller için yürütme adımları

Diğer taraftan, C / C ++ VM'lerde çalışmaz ve bu işlem yürütme döngüsünden bir adım atar ve performansı artırır. Doğrudan okunabilir insan kodunu ikili dosyalara derler.

 

code

Ancak, bu dillerde değişkenleri serbest bırakmak ve tahsis etmek büyük bir acıdır. Programlama dillerinin çoğu, nesne tahsisini ve Çöp Toplayıcı veya Referans Sayma algoritmalarını kullanarak kaldırmayı işlerken.

Go her iki dünyanın da en iyisini getiriyor. C / C ++ gibi daha düşük seviyeli diller gibi Go da derlenmiş bir dildir. Bu, performansın neredeyse daha düşük seviyeli dillere daha yakın olduğu anlamına gelir. Ayrıca, nesnenin tahsisi ve çıkarılması için çöp toplama kullanır. Yani, artık malloc () ve free () ifadeleri !!! Güzel!!!

 

GO İLE YAZILMIŞ KODLARIN BAKIMI KOLAYDIR

Sana bir şey söyleyeyim. Go diğer dillerdeki gibi çılgın programlama sözdizimine sahip değil. Çok düzgün ve temiz bir sözdizimi var.

Google’ın Google’ın tasarımcıları, dili oluştururken aklında bu şey vardı. Google, çok büyük bir kod tabanına sahip olduğundan ve binlerce geliştirici aynı kod tabanında çalıştığından, kodun diğer geliştiriciler için anlaşılması kolay olmalı ve bir kod bölümünün, kodun başka bir bölümü üzerinde en az yan etkisi olması gerekir. Bu kod kolayca bakım yapılabilir ve değiştirmesi kolay hale getirecek.

Go, kasıtlı olarak modern OOP dillerinin birçok özelliğini dışarıda bırakır.

  • Sınıf yok. Her şey sadece paketlere ayrılmıştır. Go, sınıflar yerine sadece yapılara sahiptir.
  • Miras almayı desteklemez. Bu kod değiştirmek kolay hale getirecek. Java / Python gibi diğer dillerde, eğer ABC sınıfı XYZ sınıfını devralırsa ve XYZ sınıfında bazı değişiklikler yaparsanız, bu, XYZ'yi devralan diğer sınıflarda bazı yan etkiler yaratabilir. Kalıtımın kaldırılmasıyla Go, kodu da anlamayı kolaylaştırır (bir kod parçasına bakarken bakılacak süper bir sınıf olmadığı için) .
  • Yapıcı yok.
  • Ek açıklama yok.
  • Jenerik yok.
  • İstisna yok.

Yukarıdaki değişiklikler Go'u diğer dillerden çok farklı kılar ve Go'da programlama yapmayı diğerlerinden farklı kılar. Yukarıdaki bazı noktaları beğenmeyebilirsiniz. Ancak, yukarıdaki özellikler olmadan başvurunuzu kodlayamazsınız gibi değildir. Tek yapmanız gereken 2–3 satır daha yazmak. Ancak olumlu tarafta, kodunuzu daha temiz hale getirecek ve kodunuza daha fazla netlik katacaktır.

 

golang grafik

Kod okunabilirliği vs, Verimlilik.

Grafiğin üstünde Go'nun neredeyse C / C ++ kadar verimli olduğu ve kod sözdizimini Ruby, Python ve diğer diller kadar basit tuttuğunu gösterir. Bu hem insanlar hem de işlemciler için bir kazan-kazan durumudur !!!

Swift gibi diğer yeni dillerin aksine Go sözdizimi çok kararlı. İlk halka açık olan 1.0'dan bu yana, 2012 yılında da aynı kaldı. Bu, geriye dönük olarak uyumlu olmasını sağlıyor.

 

GO, GOOGLE TARAFINDAN DESTEKLENMEKTEDİR.

  • Bunun doğrudan teknik bir avantaj olmadığını biliyorum. Ancak, Go, Google tarafından tasarlanmış ve desteklenmiştir. Google, dünyadaki en büyük bulut altyapılarından birine sahip ve çok büyük bir ölçekte ölçeklendiriliyor. Go, ölçeklenebilirlik ve etkinlikleri destekleme sorunlarını çözmek için Google tarafından tasarlanmıştır. Bunlar, kendi sunucularınızı yaratırken karşılaşacağınız sorunların aynısı.
  • Dahası Go, Adobe, BBC, IBM, Intel ve hatta Medium gibi bazı büyük şirketler tarafından da kullanılıyor . (Kaynak: https://github.com/golang/go/wiki/GoUsers )

 

SONUÇ

  • Go, diğer nesne yönelimli dillerden çok farklı olsa da, yine de aynı canavar. Go, C / C ++ gibi yüksek performans, Java gibi süper verimli eşzamanlılık yönetimi ve Python / Perl gibi kodlama için eğlence sağlar.
  • Go öğrenmek için herhangi bir planınız yoksa, donanım sınırının bize baskı yaptığını, yazılım geliştiricilerin süper verimli kodlar yazdıklarını söyleyeceğim. Geliştiricinin donanımı anlaması ve programlarını buna göre optimize etmesi gerekir. En iyi duruma getirilmiş yazılım, daha ucuz ve daha yavaş donanımlarda ( IOT cihazları gibi ) çalışabilir ve son kullanıcı deneyimi üzerinde genel olarak daha iyi etki yaratabilir .