LINUX.ORG.RU

[python][PyPy] GIL-капец :)


0

1

Дорогие любители пофлудить.

Настоящие суровые мужики из PyPy решили выпилить GILи вместо него воткнуть другой костыль. В скором времени вместо блокировок будут транзакции. Типа если две(а то и более) транзакции наложились то first wins, остальные «откытываются»(а на самом деле просто тупо прибиваются) и код переисполняется.

Я предлагаю не кидаться какашками а дождаться замеров производительности :).

Подробности

Новость что ли запилить....

>Типа если две(а то и более) транзакции наложились то first wins, остальные «откытываются»(а на самом деле просто тупо прибиваются) и код переисполняется.

Круто.

yoghurt ★★★★★ ()

Ну, вообще-то они пока ничего не решили. Но было бы прикольно, да. Можно было бы троллить хаскелляторов.

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

Они придумали STM

Что-то английская википедия молчит по этому поводу :). Пишут что впервые эта техника была предложена в 1995-м by Nir Shavit and Dan Touitou. Что-то я не вижу чтобы эти чуваки были в списке разрабов хаскеля :)

true_admin ★★★★★ ()
Ответ на: комментарий от vasilenko

Я согласен что затея спорная, но пусть хотя бы попытаются. Лично я бы хотел этот режим отключаемым потому что оно действительно не всегда нужно. Впрочем, из моих представлений о питоне оно действительно может быть сделано отключаемых аж на лету. Просто будет два набора комманд для байт-кода: обычные и те что для работы с транзакциями. Для однопоточных приложений ничего не изменится.

true_admin ★★★★★ ()
Ответ на: комментарий от yoghurt

> хм.. разве хаскеллисты придумали STM?..

Не придумали, так популяризировали.

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

А чем там троллить-то? Лично я буду исключительно рад, если STM найдет применение в PyPy. Например, в сишарпах же его запилить так и не смогли.

sanuda ()
Ответ на: комментарий от elverion

Из статьи на википедии получилось так, что на однопоточных приложениях есть профит, а на многопоточные чихать ибо все-равное пестон - детсад.

vertexua ★★★★★ ()
Ответ на: комментарий от sanuda

Лично я буду исключительно рад, если STM найдет применение в PyPy

+1

jtootf ★★★★★ ()
Ответ на: комментарий от elverion

> С чем ты не согласен?

Вот с этим:

elverion> Питон и так тормозной

Тормозными бывают не сами языки, а конкретные реализации языка (и даже при этом зависит от задачи).

elverion> накладные расходы на синхронизацию потоков его еще сильнее тормознут

Тормознут по сравнению с чем? Да и вообще, время покажет.

tailgunner ★★★★★ ()
Ответ на: комментарий от true_admin

чтобы загрузить все ядра проца :).

Дык не вижу я для этого юзкейсов. Для веба - несколько воркеров и все ок, для гавноскриптиков - не нужно, для крупоноблочного параллелизма - multiprocessing. Что бы иногда что-то там распарареллелить в десктопных приложения, которых кот наплакал... И стоит ради этого усложнять реализацию?

dizza ★★★★★ ()
Ответ на: комментарий от vertexua

Никогда не понимал зачем его изначально добавляли. В Java/.NET такого нет, почему?

Потому, что thread-safe VM написать сильно сложнее.

dizza ★★★★★ ()
Ответ на: комментарий от vertexua

зачем его изначально добавляли

Потому что с блокировками на каждый чих это очень медленно работало с однопоточными приложениями. Поэтому в итоге пришли к GIL.

true_admin ★★★★★ ()
Ответ на: комментарий от vertexua

Не думаю, что питон удачный выбор для встраивания. Но немного по другой причине. На сколько я знаю, тот же lua имеет GIL, но он per-vm, а у питона per-process GIL. Поэтому для lua можно в каждом треде создавать по инстансу vm. С питоном такое нельзя. То есть сторого говоря, GIL не является помехой для встраивания.

dizza ★★★★★ ()
Ответ на: комментарий от dizza

Замечание про pev-vm GIL верное, питон умеет только «один раз встроиться». Но я не знаю случаев когда это было бы сильно проблемой.

true_admin ★★★★★ ()

Самое хреновое, что придется переписать все питоновские библиотеки с таким подходом.

На новость не катит, потому что это даже не альфа, а только идея, которую еще никто даже не начал реализовывать.

provaton ★★★★★ ()
Ответ на: комментарий от provaton

> Ну в том примере, который в блоге, у всех методов появляется дополнительный аргумент с транзакцией.

Это только иллюстрация.

tailgunner ★★★★★ ()
Ответ на: комментарий от vertexua

Да фиг знает, особо не копал в эту сторону. Но lua выглядит чертовски привлекательным как язык. По производительности оно (lua-jit) примерно схожее c v8. И да, видимо для встраивания поддержка многопоточности не очень нужна.

dizza ★★★★★ ()
Ответ на: комментарий от dizza

В Java встроен Rhino, потому там проблемы с многопоточностью решены сразу на уровне потоков VM. Хотя не уверен что работает так же быстро как V8

vertexua ★★★★★ ()
Ответ на: комментарий от dizza

Пример идеи в моем личном проекте. Я хочу администрирование серверного приложения сделать на JavaScript. Тоесть некоторые глобальные вещи по обработке данных будут валидироваться в JS функции, которую можно будет забросить в специальную папку. Искаропки возможность применить логику исследовать обьекты статистики, передаваемые внутрь, для принятия решения.

vertexua ★★★★★ ()

Ну и зачем оно надо? Сам же Гвидо вроде как-то говорил, что GIL не уберем, пока не найдется альтернатива, не замедляющая однопоточные программы. Здесь эта проблема не решена. Ну и толку с этого?

pevzi ★★★★★ ()

А если на питоне верхний слой, а внизу so-шки из С собранные, можно будет в нескольких потоках пускать С-шные функции?

AIv ★★★★★ ()
Ответ на: комментарий от dizza

Нафига в каких-то скриптиках-расширения

Потому что не только «скриптики» на нём делаются.

настоящие треды?

Они там и так настоящие.

true_admin ★★★★★ ()
Ответ на: комментарий от AIv

можно будет в нескольких потоках пускать С-шные функции?

без проблем, правило тут только одно: В cpython интерпретатор байткода должен работать только в одном треде. Других ограничений нет со стороны cpython нет.

true_admin ★★★★★ ()
Ответ на: комментарий от pevzi

Ну и зачем оно надо?

чтобы работало быстрее

Сам же Гвидо вроде как-то говорил

А тут речь не о cpython, а о PyPy.

Здесь эта проблема не решена.

будет два варианта pypy, старый и новый. Если боишься нового то юзай старый в котором ничего не поменялось.

true_admin ★★★★★ ()
Ответ на: комментарий от true_admin

Потому что не только «скриптики» на нём делаются.

Ну так никто и не привел пример задачи где без тредов без GIL ну вообще никак.

Они там и так настоящие.

Да знаю я :)

dizza ★★★★★ ()
Ответ на: комментарий от dizza

Ну так никто и не привел пример задачи где без тредов без GIL ну вообще никак.

Пример: многопоточный сервер на сервере с несколькими ядрами.

true_admin ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.