Многопоточность jython - программирование

Многопоточность jython

Я начал изучать python пару месяцев назад, затем нашел Jython.

Правильно ли работают потоки в Jython, так как не имеет GIL? Если да, можете ли вы предложить хорошую книгу на concurrency (threading)?

4b9b3361

Ответ 1

Лучшей книгой, которую я встречал при многопоточности, является "Java Concurrency in Practice". Он очень концентрируется на потоке Java concurrency, и одновременно смиряется и увлекателен, когда вы начинаете понимать проблемы и возможности, представленные concurrency. Копия, которую я купил несколько лет назад, имела некоторые ошибки в кодировании, тем не менее, которая усугубляла уже вызывающий мозг предмет: проверьте здесь ошибки: http://jcip.net/errata.html.

Хотя он предназначен для разработчиков Java, желающих перейти на Concurrency (кстати, среди всех, кто когда-либо использовал GUI-интерфейс любого типа), я уверен, что технические трудности и тонкости, изложенные в книге, применимы к любой реализации из concurrency.

Кстати, я также люблю Jython и могу подтвердить, что что-либо concurrency, - что вы можете сделать в Java, которое вы, по-видимому, можете сделать в Jython. Однако есть оговорка: Concurrency может быть для асинхронного программирования (включая графический интерфейс) и/или для производительности. Если для последнего у вас есть проблема, на мой взгляд: Jython по моему опыту работает примерно на 10 x медленнее, чем эквивалентная Java-программа.

Это означает, что вашим более требовательным модулям Jython придется вызывать что-то другое, кроме Jython, для задач с хрустом числа. В то же время Jython до сих пор не имеет модуля многопроцессорности Python, поэтому межпроцессные коммуникации отсутствуют, если вы не рискуете оказаться в страшной территории RMI. Ты больше мужчина или женщина, чем я, если ты примешь этот вариант. Но все в порядке: см. "Окончательное руководство по Jython" в http://www.jython.org... глава 19 - это своего рода введение в стиле свистка до concurrency, а глава 10 посвящена интеграции Java и Jython (подсказка: это абсурдно легко).

  • Интересно: быстрый взгляд на сайт Jython показывает, что всего 10 дней назад, 17/05/12, была выпущена версия 2.7a1... релиз "Alpha". Это должно содержать модуль многопроцессорности, входящий в состав Python 2.6. Wd будет интересно проверить это: если это так, возможно, дает вам захватывающий вариант связывания процессов Jython и CPython (обновление позже: к сожалению, на данный момент это выглядит так, что имя модуля "многопроцессорность" не было распознано, когда я пытался)...

PS последнее слово: большинство экспертов, которые знают гораздо больше об этих вещах, чем я говорю, что закон Мура заменяется законом Амдала, что, вкратце означает, что сложная задача программирования стабильных и масштабируемых настоящих параллельных программ будет неизбежным в будущем. Точно как легко true (т.е. поток) Concurrency можно сделать с помощью умных инструментов анализа кода, которые я не могу сказать, но инвестиции в эту тему и увлекательные, интеллектуальные новые дисциплины рассуждений, навязанные Concurrency, вероятно, окупится... если вам нравится вызов.

Ответ 2

Да, с Jython вы реальная многопоточность. Jython (преемник JPython) - это реализация Python, которая работает в JVM. Одно из главных отличий между Jython и оригинальным проектом заключается в том, что первый не имеет GIL и реализует настоящую многопоточную поддержку, основанную на реализации JVM.

Я бы посоветовал вам взглянуть на это book и OReilly's.

Ответ 3

Первоначально запутанный аспект может заключаться в том, что вы можете смешивать и сопоставлять механизмы Java и Jython concurrency. Но все это работает. Причины таковы:

  • Under Jathon - это та же самая старая Java. Все его надежные механизмы резьбы и структуры данных не будут разрушаться даже под тяжелым оборудованием Jython.
  • В потоках Jython используются потоки Java в качестве шасси и добавляются надстройки, чтобы заставить их говорить API-интерфейс потоков Python. (Нет лучшего способа упростить перенос потокового кода Python.) Но суть двух типов потоков аналогична. Кроме того, что с потоками Jython

    ... нет приоритетов, ни потоковые группы, ни потоки не могут быть уничтожены, остановлены, приостановлены, возобновлены или прерваны. [1]

Идиомы Python, вероятно, немного удобнее, потому что, например, если вы хотите сделать эквивалент synchronized (some_object) { ... }, есть маленький бит требуемого, который, вероятно, будет менее читабельным, чем использование RLock.