Güvenli paralellik uygulamak için teklik türlerini kullanma


19

Bir süredir saf işlevsel dillerdeki monadlara alternatif olarak benzersizlik türleriyle ilgileniyorum; ne yazık ki, bu tür CS araştırma ezoterik bir alan ve tek tip türleri ile programlama hakkında çevrimiçi kaynaklar az ve çok arasındadır.

Tekillik türlerinin referanslar ("kutular") ve diziler gibi durum bilgisi olan veri yapılarını uygulamak için nasıl kullanılabileceği açıktır, ancak onlarla diğer yaygın durum bilgisi veri yapılarını nasıl uygulayabileceğinizden kaçar.

Örneğin, benzersiz tiplerle kilitleme uygulamak mümkün müdür? Benzersizlik türleri, iş parçacıkları arasında değiştirilebilir verileri paylaşmak için kullanılabilir mi? Eşitleme ilkeleri (muteksler gibi) oluşturmak için benzersiz türler kullanmak mümkün mü yoksa mesaj iletimi gerekli mi?


Sorunuzu biraz daha spesifik hale getirebilir misiniz? Örneğin, benzersiz türlerle kilitleme hakkında zaten ne biliyorsunuz ve kendi bilginiz nerede yetersiz?
Robert Harvey

> Örneğin, benzersiz tiplerle kilitleme hakkında ne biliyorsunuz? Benzersiz tiplerle kilitleme hakkında hiçbir şey bilmiyorum - Paralelliğin benzersiz tiplerle nasıl çalıştığını gerçekten bilmiyorum ve orada olup olmadığını bilmek istiyorum konuyla ilgili herhangi bir kaynaktır.
Ricky Stewart


2
@RickyStewart: Muhtemelen Temiz'i ( wiki.clean.cs.ru.nl/Clean ) zaten biliyorsunuzdur . Sadece bağlantıyı eklemek istedim çünkü bahsetmedin.
Giorgio

Bence paralellik için doğrusal tiplere bakmalısınız. IIRC teklik tipleri doğrusal tipler üzerine inşa edilmiştir. Frank Pfenning'in bu konuda ilginç şeyler var
Daniel Gratzer

Yanıtlar:


2

Örneğin, benzersiz tiplerle kilitleme uygulamak mümkün müdür?

Robert Harvey'nin verdiği bağlantıyı takip ettim ve hızlıca okudum. Her şeyi anladığımı veya anladığımı düşündüğümü gerçekten anladığım konusunda yüksek bir güven seviyesine sahip olduğumu söyleyemem , ancak dışsal teklik ve referans değişmezliğinin bütününün kilitlemeye gerek olmadığı anlaşılıyor.

Çoklu iş parçacığına yönelik modern yaklaşımlar kilitlemeyi önlemeye çalışır, çünkü yalnızca çok deneyimli programcılar kilitleme kullanan kod yazabilir ve kodları bile hatalara sahip olma eğilimindedir. Buna ek olarak, kilitleme kodunun neredeyse test edilemez olduğu gerçeğini eklerseniz, bunun bir şey yapmanın çok istenmeyen bir yolu olduğu açık olmalıdır ve bizi kilitlemekten kurtarmayı amaçlayan herhangi bir çözüm en azını söylemek umut vericidir.

Kilitlemeden kaçınmamızın yolu, iletilerin değişmez olması gereken ileti geçişidir. Kabaca, (ilk bakışta) referans değişmezliği, değişmez türleri inşa etmek zorunda kalmadan değişmezliği garanti etmemize yardımcı olabilecek bir teknik gibi görünmektedir ve dış teklik, katı değişmezlik gereksinimini yerel olarak rahatlatmamıza yardımcı olabilecek bir teknik gibi görünmektedir.

Benzersizlik türleri, iş parçacıkları arasında değiştirilebilir verileri paylaşmak için kullanılabilir mi?

Kağıt açıkça belirtmedi, ama anladığım kadarıyla, harici olarak benzersiz bir nesne kümesi iş parçacığı açısından güvenlidir, çünkü bir şekilde (gerçekten, nasıl? ) Bu nesne kümesinde yalnızca bir dış referans olması garanti edilir, yani böyle bir referansı alan bir iplik, başka bir iş parçacığının da onları değiştirebileceğinden endişe etmeden başvurulan nesnelere değiştirilebilir olarak davranabilir, çünkü başka hiçbir iş parçacığının başka bir referansı olamaz. Böyle bir teorik yapının nasıl uygulanabileceğini ve uygulanabileceğini merak ediyorum.

Eşitleme ilkeleri (muteksler gibi) oluşturmak için benzersiz türler kullanmak mümkün mü yoksa mesaj iletimi gerekli mi?

Yine anladığım kadarıyla, harici olarak benzersiz tipler ve referans değişmezliği, kilitleri, muteksleri ve benzerlerini gereksiz kılmak içindir. Mesajın geçilmesi bir yol gibi görünüyor ve bu iyi.

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.