Concurrency'da bir sonraki


9

Geçen yıl Java'da eşzamanlılık konusunda çok çalışıyorum ve birçok eşzamanlı paket üzerinde çalıştım ve çalıştım. Bu yüzden eşzamanlı dünyadaki gelişme açısından kendime güveniyorum. Ayrıca, eşzamanlı programlama hakkında daha fazla bilgi edinmek ve anlamakla ilgileniyorum.

Ama sonra kendime cevap veremiyorum? Çok çekirdekli işlemeyle ilgili daha fazla beceri miras almak için ekstra ne öğrenmeli veya üzerinde çalışmalıyım. Bir sonraki seviyeye geçebilmem için güzel bir kitap ('pratikte eşzamanlılık' ve 'java'da eşzamanlı programlama' 'veya kaynağın Çok çekirdekli işlemeyle ilgili olması ve zevk alması durumunda?


Teorik temelleri kaçırdıysanız, şimdi öğrenin: en.wikipedia.org/wiki/Pi-calculus
SK-logic

Yanıtlar:


8

Feragatname - Bir eşzamanlılık uzmanı değilim, ancak ortak yazarım, onu papağan ediyorum :-)

Doug Lea ve Brian Goetz'un kitaplarını okuduğunuzdan beri, bugüne kadarki en iyi materyalleri kesinlikle ele aldınız.

İleriye dönük olarak, Java 7'de yeni eşzamanlılık geliştirmeleri var. En belirgin şekilde Fork / Join çerçevesi ve yeni eşzamansız NIO API'leri.

Java 8, lambdalar / paralel koleksiyonlarla eşzamanlılık geliştirmeleri sunacak.

Ciddiye bakmak için başka bir şey, eşzamanlılık ile başa çıkmanın alternatif yollarıdır. Kör olmak gerekirse, Java'nın 'değiştirilebilir nesneleri kilitle' yaklaşımı, API'ların ne kadar geliştirildiğine bakılmaksızın her zaman hataya açık olacaktır. Bu nedenle, Java ile birlikte çalışabilirliği korurken, eşzamanlılık sorunlarıyla başa çıkmanın alternatif yolları olarak Scala'nın aktör modeline ve Clojure'un STM'sine bakmanızı öneririm.

[uyarı -> kendi kendine reklam] Bu yüzden, doğal olarak yukarıda bahsettiğim tüm şeyleri kapsayan İyi Topraklanmış Java Geliştirici kitabımızı tavsiye edeceğim : -). [/ Warning]

Unutma ki, Groovy'nin şiddetle tavsiye edilen bir Gpars lib'i var, ben şahsen kullanmadım.


Ha kitap için çok teşekkürler :). Ayrıca, önerilen kitabın Hindistan'da (yerel baskı) bulunmadığı için lütfen başka bir iyi kitap önerebilir misiniz. PS: Pratikte Eşzamanlılık bir kitabın mücevheridir
Jatin

@Martijn, Temiz! Bir süredir Groovy ve Scala'yı merak ettim ve daha fazla bilgi edinmek için onunla oynamak istedim. Kitabınız bu dillerde yeni başlayanlara yönelik mi yoksa önceden deneyim sahibi mi?
maple_shaft

@Jatin Puri - 'Uygulamada eşzamanlılık' ve 'java'da eşzamanlı programlama' hakkında başka bir başlık bilmiyorum, Henry Wong'un 'Java Threads' O'Reilly başlığı var, ama hepsi bu.
Martijn Verburg

@maple_shift - Yeni başlayanlara yönelik :-)
Martijn Verburg

2

D programlama dili , her ikisi de kullanımları olan ve oldukça ilginç olan eşzamanlı programlama için iki paradigma sağlar.

std.concurrency , varsayılan bellek paylaşımı olmadan ileti aktarımı sağlar. D'deki tüm küresel ve statik değişkenler iş parçacığı yerel varsayılan işlemiş spawnve senddeğişken işaretçi indirection içeren iletileri gönderilmesine izin vermemektedir. sharedTip sistemi tarafından ek kontrol gerektiren anahtar kelime ile sınırlı paylaşım elde edilebilir . Dilin güvenli lehçesi dışında, __gsharedanahtar kelimeyi kullanarak klasik C / Java tarzı genel / paylaşılan değişkenleri zorlayabilirsiniz , ancak tüm bahisler yarış güvenliğine kadar kapalıdır. Bu model Andrei Alexandresu'nun "D Programlama Dili" adlı kitabının ücretsiz bölümünde ayrıntılı olarak açıklanmıştır .

std.parallelism daha az güvenlidir ancak bazı yönlerden std.concurrency'dan daha esnektir ve özellikle genel durum eşzamanlılığından ziyade veri işleme verimini artırmak için çok çekirdekli veri ve görev paralelliğine yöneliktir. Paralel bir ön döngü, asenkron fonksiyon çağrıları, paralel indirgeme vb. Özellikleri içerir. Yarış güvenli kod yazmayı kolaylaştırmak için mekanizmalar sağlar, ancak bunu yapmak yine de bir dereceye kadar disiplin gerektirir.

Konuyla ilgili son makalemde, D'deki iki büyük çok iş parçacıklı paradigma hakkında daha ayrıntılı bir tartışma bulunabilir .


2

Gitmenizi ve Clojure'a bir göz atmanızı şiddetle tavsiye ediyorum.

Eşzamanlılığa yaklaşım çok yeni ve bence Java ve diğer birçok dilde gördükleriniz konusunda önemli bir ilerleme. Bazı önemli noktalar:

  • Kimlik ve durum ayrılır - OOP, nesne kimliğini geçerli durumla değiştirilebilir üye değişkenler biçiminde tamamlar. Clojure, kimliği (yönetilen referanslar) ve durumu (değişmez veri yapıları), güvenilir eşzamanlı programların geliştirilmesini önemli ölçüde basitleştirecek şekilde kesinlikle ayırır.
  • Kalıcı değişmez veri yapıları - her şey değişmez olduğu için, istediğiniz zaman verilerin / durumun anlık görüntüsünü alabilir ve altınızda mutasyona uğramayacağından emin olabilirsiniz. Ancak bundan daha iyisi - verileri önceki sürümlerle paylaşan kalıcı veri yapılarıdır. Sonuç olarak, işlemler, değiştirilemez veriler için yazma üzerine kopyalama stratejisi için ödeyeceğiniz O (n) yerine O (1) 'e çok daha yakındır.
  • Yazılım işlem belleği - kilitleri kullanmak yerine, kodu (dosync ...) bloğuna koyarsınız ve bunlar otomatik olarak bir işlem olarak çalıştırılır. Kilitlenme riski yoktur ve karmaşık kilitleme stratejileri geliştirmeye gerek yoktur. Bu, özellikle yukarıdaki değişmez veri yapıları ile birleştirildiğinde büyük bir kazançtır. Clojure etkili bir şekilde STM'de çok versiyonlu eşzamanlılık kontrolü uygular .
  • Fonksiyonel programlama paradigması, güvenilir eşzamanlı kod yazmayı çok daha kolay hale getirmek için kullanılır. Temel olarak değişmez bir veri yapısı alırsanız, onu saf bir işlevle çalıştırır ve farklı bir değişmez veri yapısı çıkarırsanız, kodunuzun eşzamanlılık için güvenli olacağı garanti edilir.

Bu videoyu giriş olarak izlemenizi öneririm


1

Java'yı genişleten ve JVM'de çalışan Scala diline bir göz atın. "Aktörler" kavramını Erlang'dan ödünç alır ve eşzamanlılık hatalarını ele alma konusunda iyi bir yetenek verir.


1

Tamamen yeni bir seviyeye taşımak istiyorsanız, CUDA ile programlamaya bakmak isteyebilirsiniz .

Bu, algoritmalarınızı grafik kartınızda birkaç ana CPU çekirdeği yerine yüzlerce işlem çekirdeğinden dağıtmanıza izin verir. GPGPU tekniklerini kullanarak python gibi üst düzey dilleri hızlandırmayı nispeten kolaylaştıran Dil bağlamaları bile var .


@Chiron - Dürüst olmak gerekirse, daha önce kimsenin bahsetmediğine şaşırdım.
Mark Booth

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.