Я начал изучать python пару месяцев назад, затем нашел Jython.
Правильно ли работают потоки в Jython, так как не имеет GIL? Если да, можете ли вы предложить хорошую книгу на concurrency (threading)?
Я начал изучать python пару месяцев назад, затем нашел Jython.
Правильно ли работают потоки в Jython, так как не имеет GIL? Если да, можете ли вы предложить хорошую книгу на concurrency (threading)?
Лучшей книгой, которую я встречал при многопоточности, является "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 (подсказка: это абсурдно легко).
PS последнее слово: большинство экспертов, которые знают гораздо больше об этих вещах, чем я говорю, что закон Мура заменяется законом Амдала, что, вкратце означает, что сложная задача программирования стабильных и масштабируемых настоящих параллельных программ будет неизбежным в будущем. Точно как легко true (т.е. поток) Concurrency можно сделать с помощью умных инструментов анализа кода, которые я не могу сказать, но инвестиции в эту тему и увлекательные, интеллектуальные новые дисциплины рассуждений, навязанные Concurrency, вероятно, окупится... если вам нравится вызов.
Да, с Jython вы реальная многопоточность. Jython (преемник JPython) - это реализация Python, которая работает в JVM. Одно из главных отличий между Jython и оригинальным проектом заключается в том, что первый не имеет GIL и реализует настоящую многопоточную поддержку, основанную на реализации JVM.
Первоначально запутанный аспект может заключаться в том, что вы можете смешивать и сопоставлять механизмы Java и Jython concurrency. Но все это работает. Причины таковы:
... нет приоритетов, ни потоковые группы, ни потоки не могут быть уничтожены, остановлены, приостановлены, возобновлены или прерваны. [1]
Идиомы Python, вероятно, немного удобнее, потому что, например, если вы хотите сделать эквивалент synchronized (some_object) { ... }
, есть маленький бит требуемого, который, вероятно, будет менее читабельным, чем использование RLock.