1970'den 2002'ye kadar işlemciler yaklaşık 18 ayda bir iki katına çıktı. Yani bir programcı olarak tek yapmanız gereken beklemekti ve programınız daha hızlı gidecekti. Sorun 2002 civarında kuralların değişmesidir. Şimdi daha büyük hızlı işlemciler yapmıyorlar, daha küçük daha yavaş işlemciler yapıyorlar, ancak bunları gruplara ayırıyorlar. Üzerinde çalıştığım bilgisayarın 4 çekirdeği var ve 8 çekirdeğe kadar çekirdek (ve çekirdek başına 4 iş parçacığı) var. Yakında çok daha fazla çekirdekli cipsimiz olacak.
Dolayısıyla, eşzamanlı olmayan bir program yazarsanız, 1 çekirdek veya iplik kullandığınızı göreceksiniz, ancak CPU'nun geri kalanı hiçbir şey yapmadan orada oturuyor. Yani 16 çekirdeğiniz varsa 1 programınızı çalıştırıyor ve diğer 15 tanesi orada oturuyor!
Eşzamanlılık sorunu, deterministik olmamasıdır. Bu, farklı iş parçacıklarının hangi sırayla bir şeyler yapacağını tam olarak bilmediğiniz anlamına gelir. Geleneksel olarak programcılar bunu kilitleri ve benzerlerini kullanarak çözmeye çalışmıştır. Bu yol açmıştır LOT ağrı. Birden fazla iş parçacığının serbestçe erişebildiği bir tür değişebilir duruma sahip olmak, genellikle ağrı ve heisnebugs için bir formüldür!
Geç eğilim, değişebilir durumu sıkı bir şekilde kontrol eden fonksiyonel dillere geçmektir. İşlevsel dillerin eşzamanlılığı ele almasının iki temel yolu vardır. Birincisi mesaj iletimi kullanmaktır. Bu en iyi Erlang tarafından gösterilir. Erlang'da genellikle süreçler arasında Paylaşılan durum yoktur. Hafızayı değil, geçen mesajlarımı paylaşarak iletişim kurarlar. Şu anda yaptığımız için bu sizin için anlamlı olmalıdır. Bu bilgiyi size bir mesaj göndererek gönderiyorum, beynimden hatırlayarak değil! Kilitleme hatalarının çoğunu geçen mesaja geçerek kolayca uzaklaşın. Ayrıca, mesajlar ağ üzerinden ve bir düğüm içinde iletilebilir.
Diğer yöntem, Yazılım Transkripsiyonel Belleği anlamına gelen STM'dir, Bu clojure ve Haskell'de (ve diğerlerinde) bulunur. STM'de bellek paylaşılır ancak değişiklikler yalnızca bir işlemle yapılabilir. Veritabanı milletvekilleri 1970'lerde tüm bunları anladım gibi biz doğru olsun sağlamak oldukça kolaydır.
Aslında biraz fazla basitleştirdim, Clojure ve Haskell her ikisi de mesaj geçişi yapabilir ve Erlang STM yapabilir.
Feragatname Erlang ile Programming Web Services'in yazarı , önümüzdeki birkaç hafta içinde erken sürümde çıkacak.