Класс. дождались таки. День сегодня неплохой, день рождения у товарища, пару новостей хороших с работы
Когда появится wxPython под него и Blender3d перенесут, тогда и попробую. Пока 2,5 продолжу юзать.
Здравствуйте, Аноним, Вы писали:
C>>Ну, если кто-то ещё не видел — сегодня вышел финальный релиз Python 3 (aka "Python 3000"). А>GIL так и не убрали? Эх...
Ага. Максимум что могу предложить — это http://docs.python.org/dev/library/multiprocessing.html
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, Аноним, Вы писали:
C>>>Ну, если кто-то ещё не видел — сегодня вышел финальный релиз Python 3 (aka "Python 3000"). А>>GIL так и не убрали? Эх... C>Ага. Максимум что могу предложить — это http://docs.python.org/dev/library/multiprocessing.html
Я не думаю что GIL вобще когда либо починят. Для этого придется переписать пол интерпретатора. И плюс будет сомнительный ведь придется создавать по менаджеру памяти и GC на поток. Кроме того придется чтото делать с глобальными переменными. В общем даже не представляю как это победить в питоне.
Да и не особо страшен этот GIL. Например если ваш тред висит и ожидает предположим сокет, то замедления производительности не будет. В остальных случаях многопоточная программа будет выполняться как однопоточная, без замедления по крайней мере. Модуль multiprocessing нужен для тех случаев когда питон обрабатывает кучу данных и очень надо чтобы оно работало быстрее. Но если такая ситуация приключилась с вами, то скорее всего не верно выбран инструмент... на сишке такое писать надобно.
Кстати говоря интересно, что проблема GIL остро стоит только в питоне, больше нигде я такого не видел, хотя в тех же php и ruby тот же самый GIL.
Здравствуйте, Critical Error, Вы писали:
CE>Я не думаю что GIL вобще когда либо починят. Для этого придется переписать пол интерпретатора. И плюс будет сомнительный ведь придется создавать по менаджеру памяти и GC на поток. Кроме того придется чтото делать с глобальными переменными. В общем даже не представляю как это победить в питоне.
Ну это, всё делается как в куче других языков с многопоточностью и GC.
CE>Да и не особо страшен этот GIL. Например если ваш тред висит и ожидает предположим сокет, то замедления производительности не будет. В остальных случаях многопоточная программа будет выполняться как однопоточная, без замедления по крайней мере. Модуль multiprocessing нужен для тех случаев когда питон обрабатывает кучу данных и очень надо чтобы оно работало быстрее. Но если такая ситуация приключилась с вами, то скорее всего не верно выбран инструмент... на сишке такое писать надобно.
Сейчас типа процессоры на 32 ядра будут в кофеварки ставить. Хотелось бы иметь реальную многопоточность.
CE>Кстати говоря интересно, что проблема GIL остро стоит только в питоне, больше нигде я такого не видел, хотя в тех же php и ruby тот же самый GIL.
Изначально добавили, а потом сил не хватило переписать.
Здравствуйте, Cyberax, Вы писали:
C>Ну это, всё делается как в куче других языков с многопоточностью и GC.
Я не спец, поэтому могу ошибаться, но единственный язык без проблемы с GIL — это erlang. И то по той лишь причине, что там нельзя созать тред ОС, хотя сейчас менаджер потоков VM erlang-а может создавать несколько тредов для выполнения на них легковесных процессов. Но даже там по менаджеру памяти и GC на поток ОС.
Есть еще правда куча "мелких" языков навроде lua. Там нельзя создавать треды из языка, но зато можно наплодить сколько угодно инстансов интерпретатора. Каждый естесственно со своей кучей и конечно изолирован от остальных инстансов. Вот в таких языках тоже нет проблемы GIL.
Здравствуйте, Critical Error, Вы писали:
C>>Ну это, всё делается как в куче других языков с многопоточностью и GC. CE>Я не спец, поэтому могу ошибаться, но единственный язык без проблемы с GIL — это erlang. И то по той лишь причине, что там нельзя созать тред ОС, хотя сейчас менаджер потоков VM erlang-а может создавать несколько тредов для выполнения на них легковесных процессов. Но даже там по менаджеру памяти и GC на поток ОС.
Вообще-то, без всяких проблем с потоками работает GC и в Java, .NET, Ruby и даже в старом добром С (Boehm GC)!
CE>Есть еще правда куча "мелких" языков навроде lua. Там нельзя создавать треды из языка, но зато можно наплодить сколько угодно инстансов интерпретатора. Каждый естесственно со своей кучей и конечно изолирован от остальных инстансов. Вот в таких языках тоже нет проблемы GIL. CE>А еще? java? .NET? Там как?
Без проблем всё работает. И по куче на поток не требуется, естественно (точнее, такая оптимизация может использоваться, но она нифига не обязательна).
Здравствуйте, Cyberax, Вы писали:
C>Вообще-то, без всяких проблем с потоками работает GC и в Java, .NET, Ruby и даже в старом добром С (Boehm GC)!
CE>>А еще? java? .NET? Там как? C>Без проблем всё работает. И по куче на поток не требуется, естественно (точнее, такая оптимизация может использоваться, но она нифига не обязательна).
А как??? На ум приходит только одно: менаджер памяти и GC защищен мьютексом. Ну и чем это отличается от GIL??? Разве что может быть несколько пулов обьектов и соответсвенно несколько мьютексов. Это оптимизация, но не большая... Может быть также что менаджер памяти глобальный, а вот GC какойнибудь хитро-локалный для треда. Хотя в принципе 2 мьютекса — это уже не GIL, а Half-IL
Здравствуйте, Critical Error, Вы писали:
C>>Без проблем всё работает. И по куче на поток не требуется, естественно (точнее, такая оптимизация может использоваться, но она нифига не обязательна). CE>А как???
Ну блин... Тут писать можно...
CE>На ум приходит только одно: менаджер памяти и GC защищен мьютексом.
Это как вариант. Ещё часто используют комбинированный способ — небольшие thread-local арены для мелких объектов и специальная куча для больших.
CE>Ну и чем это отличается от GIL???
Всем.
GIL захватывается на все инструкции. Т.е. у меня в Java если не происходит аллокация памяти, то потоки гарантированно будут спокойно работать параллельно на нескольких ядрах (если stop-the-world GC не активен, конечно). В Питоне захватывается GIL вообще для всех операций (кроме некоторых простейших арифметических).
CE>Разве что может быть несколько пулов обьектов и соответсвенно несколько мьютексов. Это оптимизация, но не большая... Может быть также что менаджер памяти глобальный, а вот GC какойнибудь хитро-локалный для треда. Хотя в принципе 2 мьютекса — это уже не GIL, а Half-IL
Там всё сложнее... Обычно используется generational GC, который позволяет минимизировать потери на него.
В общем, Питон тут в каменном веке по уровню развития.
Здравствуйте, Cyberax, Вы писали:
C>В Питоне захватывается GIL вообще для всех операций (кроме некоторых простейших арифметических).
Ого, если это действительно так, то все и правда очень плохо. Интересно зачем понадобилось лочить интерпретатор для каждой инструкции?...
C>В общем, Питон тут в каменном веке по уровню развития.
Да я говорю нужно переписывать его... Но задача эта трудна, я б не смог по крайней мере. Но язык сам по себе классный. Из всех существующих по моему мнению лучший в плане синтаксиса.
Здравствуйте, Critical Error, Вы писали:
C>>В Питоне захватывается GIL вообще для всех операций (кроме некоторых простейших арифметических). CE>Ого, если это действительно так, то все и правда очень плохо. Интересно зачем понадобилось лочить интерпретатор для каждой инструкции?...
Внутренности интерпретатора — не thread-safe. Скажем, там счётчики ссылок не thread-safe'ные, что когда-то давало неплохое ускорение.
C>>В общем, Питон тут в каменном веке по уровню развития. CE>Да я говорю нужно переписывать его... Но задача эта трудна, я б не смог по крайней мере. Но язык сам по себе классный. Из всех существующих по моему мнению лучший в плане синтаксиса.
JPython рулит
CE>Кстати говоря интересно, что проблема GIL остро стоит только в питоне, больше нигде я такого не видел, хотя в тех же php и ruby тот же самый GIL.
Скорее всего потому что питон в отличии от этих родственных языков, намного чаще используется как язык общего назначения, например на нем в отличии от них пишут и десктопные приложения.
В общем-то, я и раньше читал whatznew, но если резюмировать: второстепенной важности изменения синтаксиса, GIL остается (навечно), никаких подвижек в сторону concurrency (в то время, как космические корабли бороздят...) и и про развертывание хвостовой рекурсии не слышно.
Судя по списку, это все можно охарактеризовать скорее как рефакториг потрохов, т.е. сугубо внутреннее дело разработчиков, который, однако привел к несовместимостям; чем стало по сути лучше — я не вижу.
Предвижу также, что ветка 2.X развиваться не будет, или будет плохо.
Короче, мы переходить на 3.0 в новых проектах не будем, и вероятно, вообще не будем, по возможности, использовать питон в новых проектах — нет смысла.
CE>Я не думаю что GIL вобще когда либо починят. Для этого придется переписать пол интерпретатора. И плюс будет сомнительный ведь придется создавать по менаджеру памяти и GC на поток. Кроме того придется чтото делать с глобальными переменными. В общем даже не представляю как это победить в питоне.
В тикле потоки имеют свои собственные иерархии интерпретаторов. Нет одного основного.
В результате малое взаимодействие между потоками во время GC, отсутствие глобальных переменных и (!) если написанное на C(++) расширение умеет работать с несколькими интерпретаторами (хранит данные в ClientData указателе), то оно умеет работать и с несколькими потоками.
CE>Кстати говоря интересно, что проблема GIL остро стоит только в питоне, больше нигде я такого не видел, хотя в тех же php и ruby тот же самый GIL.
php живёт внутри apache, который делает fork. Поэтому там одна задача и один же интерпретатор, никаких потоков.
А вот AOLserver с тиклем внутри изначально был многопоточный.
Резюмируя: решения есть, давнишние, проверенные.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Здравствуйте, dmz, Вы писали:
dmz>Короче, мы переходить на 3.0 в новых проектах не будем, и вероятно, вообще не будем, по возможности, использовать питон в новых проектах — нет смысла.
А какую технологию/язык вы предпочтете на место питона?
Здравствуйте, Daevaorn, Вы писали:
D>А какую технологию/язык вы предпочтете на место питона?
Scala?
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Re[2]: Вышел релиз Python 3000!
От:
Аноним
Дата:
05.12.08 12:59
Оценка:
Здравствуйте, dmz, Вы писали:
dmz>В общем-то, я и раньше читал whatznew, но если резюмировать: второстепенной важности изменения синтаксиса, GIL остается (навечно), никаких подвижек в сторону concurrency (в то время, как космические корабли бороздят...) и и про развертывание хвостовой рекурсии не слышно.
Про хвостовую рекурсию, кстати, уже давно сказали -- "нету и не будет".