Sorum şu: ne tür bir uygulama çok eşzamanlı yürütme işlemi gerektiriyor?
1) Bir dilin "ölçeklendirilmesi" gerçeği, işler yoldan daha karmaşıklaştıkça bu dili atmanız gerekme olasılığının düşük olduğu anlamına gelir. (Buna "Bütün Ürün" kavramı denir.) Birçok kişi bu nedenle Nginx için Apache'yi kazıyor. İplik ekinin uyguladığı "zor sınırın" yakınında bir yerdeyseniz, korkarsınız ve onu geçmenin yollarını düşünmeye başlarsınız. Web siteleri ne kadar trafik alacaklarını asla tahmin edemezler; bu nedenle, ölçeklendirilebilir hale getirmek için biraz zaman harcamak mantıklıdır.
2) İstek başına bir goroutine sadece başlangıç. Goroutinleri dahili olarak kullanmak için birçok neden var.
- 100'ün eşzamanlı isteği ile bir web uygulaması düşünün, ancak her istek 100'ünde arka uç istekleri oluşturur. Açık bir örnek bir arama motoru toplayıcısıdır. Ancak, herhangi bir uygulama ekrandaki her "alan" için goroutinler oluşturabilir, ardından bunları sırayla bağımsız olarak oluşturabilir. Örneğin, Amazon.com'daki her sayfa yalnızca sizin için bir araya getirilmiş 150+ arka uç isteğinden oluşur. Fark etmiyorsunuz çünkü paraleldirler, sıralı değildirler ve her "alan" kendi web servisidir.
- Güvenilirlik ve gecikmenin en önemli olduğu herhangi bir uygulamayı düşünün. Muhtemelen gelen her bir isteğin birkaç arka uç isteğini reddetmesini ve hangi verileri önce geri verdiğini geri vermesini istiyorsun .
- Uygulamanızda yapılan herhangi bir "müşteri birleşimini" göz önünde bulundurun. "Her bir öğe için veri al" demek yerine, bir sürü gobinde dönebilirsin. Sorgulamak için bir grup köle DB'niz varsa, sihirli bir şekilde N zamanı daha hızlı gideceksiniz. Eğer yapmazsan, daha yavaş olmayacak.
iş parçacığı / işlem sayısı fiziksel çekirdek sayısından çok daha büyük olduğunda isabet azalan döndürmeler
Bir programı CSP'ye bölmenin tek nedeni performans değildir . Aslında programın anlaşılmasını kolaylaştırabilir ve bazı problemler çok daha az kodla çözülebilir.
Yukarıda verilen slaytlarda olduğu gibi, kodunuzda eşzamanlılık olması sorunu organize etmenin bir yoludur. Goroutinlere sahip olmamak, dilinizde bir Harita / Dictonary / Hash veri yapısına sahip olmamak gibidir. Onsuz geçebilirsiniz. Ancak bir kez elinize geçtikten sonra, her yerde kullanmaya başlarsınız ve programınızı gerçekten kolaylaştırır.
Geçmişte, bu çok iş parçacıklı programlama "kendi yuvarla" anlamına geliyordu. Ancak bu karmaşık ve tehlikeliydi - yarış oluşturmadığınızdan emin olmak için hala çok fazla araç yok. Ve gelecekteki bir koruyucunun hata yapmasını nasıl önlersiniz? Büyük / karmaşık programlara bakarsanız, bu yönde çok fazla kaynak harcadıklarını görürsünüz .
Eşzamanlılık çoğu dilin birinci sınıf bir parçası olmadığından, bugünün programcıları neden kendileri için yararlı olacağı konusunda kör bir noktaya sahiptir. Bu sadece her telefon ve kol saati 1000 çekirdeğe doğru geldiğinde daha belirgin hale gelecektir. Dahili bir yarış dedektörü aracıyla birlikte gidin.