Далі в Concurrency


9

Протягом минулого року я багато працював над паралельністю на Java і будував і працював над багатьма паралельними пакетами. Тож, що стосується розвитку в сучасному світі, я цілком впевнений. Далі мені дуже цікаво дізнатися і зрозуміти більше про одночасне програмування.

Але я не в змозі відповісти собі, що далі? Що додаткового я повинен навчитися чи працювати над тим, щоб успадкувати більше навичок, пов’язаних із багатоядерною обробкою. Якщо є якась приємна книга (прочитана та сподобалася "паралельність на практиці" та "паралельне програмування в Java") або ресурс, пов'язаний з багатоядерною обробкою, щоб я міг перейти на наступний рівень?


Якщо ви пропустили теоретичні основи, вивчіть їх зараз: en.wikipedia.org/wiki/Pi-calculus
SK-логіка

Відповіді:


8

Відмова - Я не експерт з питань конкуренції, але мій співавтор - я його папугу :-)

Оскільки ви читали книги Дуга Леї та Брайана Геца, то ви напевно висвітлювали найкращий матеріал на сьогоднішній день.

Йдемо вперед, в Java 7. з'явилися нові покращення одночасності. Найбільш помітно рамки Fork / Join та нові асинхронні API NIO.

Java 8 представить подальші покращення одночасності з лямбдами / паралельними колекціями.

Інша річ, на яку слід серйозно звернути увагу, - це альтернативні способи поводження з одночасністю. Щоб бути тупим, підхід Java до «блокування змінних об’єктів» завжди буде схильним до помилок, незалежно від того, наскільки покращені API. Тому я рекомендую розглянути модель акторів Scala та STM Clojure як альтернативні способи вирішення проблем одночасності, зберігаючи сумісність з Java.

[попередження -> самореклама] Тому я, звичайно, порекомендую нашу майбутню книгу "Добре заземлений Java Developer" , яка охоплює всі речі, про які я згадував вище: -). [/ попередження]

Щоб я не забув, у Groovy також є настійно рекомендована ліпа Gpars, але я її особисто не використовував.


Ха дякую за книгу :). Чи можете ви також запропонувати якусь іншу хорошу книгу, оскільки ваша рекомендована книга тут недоступна (місцеве видання) в Індії.PS: Конкурс у практиці - це дорогоцінний камінь книги
Джатін

@Martijn, акуратно! Мені вже деякий час цікаво про Groovy та Scala і хотілося пограти з ним, щоб дізнатися більше. Чи ваша книга орієнтована на початківців цими мовами чи вона передбачає попередній досвід?
maple_shaft

@Jatin Puri - Я справді не знаю жодних інших назв над «паралельністю на практиці» та «одночасним програмуванням в Java», є заголовок Генрі Вонга «Java Threads» O'Reilly, але ось про це.
Мартійн Вербург

@maple_shift - Націлений на початківців :-)
Martijn Verburg

2

Мова програмування D пропонує дві парадигми для одночасного програмування, обидві мають своє використання та є досить цікавими.

std.concurrency забезпечує передачу повідомлень без спільного використання пам'яті. Усі глобальні та статичні змінні в D за замовчуванням є локальними нитками spawnі sendне дозволяють надсилати повідомлення, що містять змінну непрямувальну вказівку. Обмежений обмін можна отримати за допомогою sharedключового слова, що тягне за собою додаткову перевірку системою типів. Поза безпечним діалектом мови ви можете змусити класичні глобальні / спільні змінні у стилі C / Java, використовуючи __gsharedключове слово, але всі ставки знижуються, наскільки це стосується безпеки гонки. Ця модель детально описана у вільній главі книги Андрія Олександресу "Мова програмування".

std.parallelism менш безпечний, але в деякому відношенні більш гнучкий ніж std.concurrency і спеціально орієнтований на багатоядерні дані та паралелізм завдань для збільшення пропускної здатності обробки даних, а не загального випадку. Він має паралельний цикл foreach, асинхронні виклики функцій, паралельні скорочення тощо. Він надає механізми для спрощення запису безпечного коду, але це все ще вимагає певної дисципліни.

Більш ретельне обговорення двох основних багатопотокових парадигм у D можна знайти в моїй останній статті на цю тему.


2

Я настійно пропоную вам піти і поглянути на Clojure

Підхід до паралельності є дуже новим, і на мій погляд, істотний прогрес у тому, що ви бачите на Java та більшості інших мов. Деякі ключові моменти:

  • Ідентичність та стан розділені - OOP завершує ідентифікацію об'єкта з його поточним станом у вигляді змінних змінних членів. Clojure суворо розділяє ідентичність (керовані посилання) та стан (незмінні структури даних) таким чином, що суттєво спрощує розробку надійних одночасних програм.
  • Стійкі незмінні структури даних - оскільки все незмінне, ви можете будь-коли зробити знімок даних / стану та бути впевненим, що він не буде вимкнено під вами. Але краще, ніж це - вони є стійкими структурами даних, які обмінюються даними з попередніми версіями. Як результат, операції набагато ближче до O (1), а не до O (n), яку ви б заплатили за стратегію копіювання при записі незмінних даних.
  • Трансакційна пам'ять програмного забезпечення - замість використання замків, ви просто додаєте код до блоку (dosync ...), і вони автоматично запускаються як транзакція. Немає ризику тупиків і не потрібно розробляти складні стратегії блокування. Це величезна виграш, особливо в поєднанні з незмінними структурами даних вище. Ефективно Clojure реалізує багатоверсійний контроль одночасності у своїй STM.
  • Парадигма функціонального програмування використовується для полегшення написання надійного одночасного коду. Якщо ви берете непорушну структуру даних, запускаєте її через чисту функцію та виводите іншу незмінну структуру даних, то ваш код гарантовано безпечний для одночасності.

Я б запропонував переглянути це відео як вступ


1

Погляньте на мову Scala, який розширює Java та працює на JVM. Він запозичує поняття "Актори" від Ерланга і дає хороші можливості для усунення невдач у одночасності.


1

Якщо ви хочете вивести його на абсолютно новий рівень, ви можете вивчити програмування за допомогою CUDA .

Це дозволяє розподілити алгоритми на сотні ядер обробки на графічній карті, а не на декілька основних ядер процесора. Існують навіть мовні прив’язки, які, очевидно, дозволяють порівняно легко прискорити мови високого рівня, такі як python, використовуючи методи GPGPU .


@Chiron - Чесно кажучи, я здивувався, що ніхто про нього вже не згадував.
Марк Бут

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.