LINUX.ORG.RU

Есть ли прогрес в полку серверных динамических языков?


0

1

Пару лет назад осваивал джангу, webpy, еще что-то с каким-то пошлым немецким названием. Все шло хорошо пока не понадобилось выпустить свое детище в реальный мир. Тут я вмиг осознал и был раздавлен темной стороной питона, что зовется GIL.

Пошерстив в гугле, выяснил, что проблему блокировок народ решает грубыми и перверсивными способами.

Некоторые с помощью mod_python (mod_php/ruby/..) выстраивают в памяти батарею из python-рантаймов. Каждый этот рантайм пользуется один раз, после чего mod_python смывает за собой и создает новую копию (ну или как-то так).

Некоторые с помошью fastsgi/uwsgi. Которые, по-сути дублируют первый вариант, только ответственность за батарею процессов теперь лежит не на веб-сервере. А веб сервер только балансирует запросы к этой батарее.

Хотел узнать, изменилось ли что-нибудь в лучшую сторону? Как нынче принято запускать, например, ту же джангу или джумлу на сервере?

★★★★★

Последнее исправление: makoven (всего исправлений: 1)
Ответ на: комментарий от makoven

тогда тормозной питон тебе тем более не подходит.

ugoday ★★★★★
()

Обычно просто запускают много процессов с балансером между ними. Многопоточность в Python используется в случаях, когда вызывается много потоков, которые упираются в вызовы нативного кода, который при заворачивании в Python отпускает GIL

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

Еще даже в рамках одного процесса при приложениях упирающихся в IO, неплохо помогает использование асинхронного программирования, например кооперативной многозадачности. Прирост, в разы и GIL ни при чем

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

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

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

Сейчас все больше людей пишут много кода на клиенте, на JS. На сервере асинхронный REST, тоесть традиционные фреймворки не особо нужны. Это проще, понятнее и производительнее

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

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

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

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

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

Пиши на Java и не выпендривайся

Слушаюсь. Taka-taka-taka:

class HelloWorldApp {
    public static void main(String[] args) {
        System.out.println("Hello World!"); // Display the string.
    }
}

makoven ★★★★★
() автор топика
Последнее исправление: makoven (всего исправлений: 1)

Есть ли прогрес в полку серверных динамических языков?

прогресс

динамических языков

/0

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

Намекаешь, что сейчас модно запускать питон на жава-машине?

Я тебе указал, что ты можешь использовать свой любимый питончик с многопоточностью и человеческими блокировками. Тебя парит что ли, что оно будет запускаться под JVM, а не под питоновским интерпретатором?

anonymous
()

Тут я вмиг осознал и был раздавлен темной стороной питона, что зовется GIL.

Что-то совсем не то осознал, это вообще не имеет отношения ко всему изложенному далее по тексту.

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

можешь использовать свой любимый питончик с многопоточностью

«Можешь» в твоем случае означает «можешь в своем, специально заточенном под jython проекте»?

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

Как я понимаю, однажды Гвидо не смог в thread-safe memory management и пошло-поехало: в одном треде читается файл - остальные замерли и ждут.

makoven ★★★★★
() автор топика
Последнее исправление: makoven (всего исправлений: 1)
Ответ на: комментарий от anonymous

Тебя парит что ли, что оно будет запускаться под JVM, а не под питоновским интерпретатором?

А с каких пор в jvm нету блокировок?

anonymous
()

Не обязательно зацикливаться на питон. Есть go, D.
Для питона есть нехеровые биндинги к libevent и другим асинхронным/многопоточным либам, поэтому написать свой скоростной rest api / балансировщик для django application - не проблема.
Но лучше взять go / vibe.d если уж так важна производительность. Хотя джанга сама по себе довольна быстра, flask тем более, уж 2-3 тысячи запросов в секунду к веб морде без кеширования они выдерживают элементарно, не думаю, что у ТС такие супер-нагруженные сервера, что джанга в 4 процесса fastcgi не выдержит их :-)

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

Осилил, может и не именно он, но это оказалось сильно медленнее. Тем не менее это не имеет отношения к тексту твоего поста.

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

Не обязательно зацикливаться на питон. Есть go, D.

Скажи это разработчикам неплохих в целом проектов. Но которые на всякой джанге и без специального отношения (mod_python, балансировка) начинают тормозить на трех одновременно работающих пользователях)

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

Это почему это?

О чём пишешь в подробностях называется примерно application server и «придумывают» его не для борьбы с GIL. Если первый раз в жизни что-то нахерачил на питоне, выложил под нагрузку и всё стало плохо, то вероятно ты что-то сделал не так и GIL к этому отношения не имеет. Неправильный дизайн приложения тоже относится к 'что-то не так'

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

А какой правильный дизайн для приложения с GIL чтобы оно хорошо вело себя под нагрузкой не прибегая к application server?

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

в одном треде читается файл - остальные замерли и ждут

Нет, ты не правильно понял.

bj
()
Ответ на: комментарий от anonymous

А с каких пор в jvm нету блокировок?

Там множество блокировок, а не одна блокировка, которая просто останавливает все остальные потоки, что парит топикстартера!

anonymous
()
Ответ на: комментарий от makoven

«Можешь» в твоем случае означает «можешь в своем, специально заточенном под jython проекте»?

Твой вопрос вообще о чём был? А ты что хотел, готовое решение? ну возьми эрланг тогда

anonymous
()
Ответ на: комментарий от makoven

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

Это как в тормозах системы винить 12309, хотя при этом в лисе охулиард вкладок открыт.

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

гил парит только нулевых школьников

Наверное поэтому сейчас все нулевые школьники бегут с пыхов/питонов на go/java. Все нулевые школьники всех крупных и мелких компаний)

makoven ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

т.е. есть способы нивелирования влияния GIL до нуля?

есть, очень простой способ - не нужно пользоваться потоками.

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

Лучше писать на синтезе хипстоты с интерпрайзом — на Scala.

quantum-troll ★★★★★
()
Ответ на: комментарий от bj

нет, GIL это действительно проблема, сильно ограничивающая возможность вертикального масштабирования. Кто не понимает этого - тот дебил.

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

школьники бегут с пыхов/питонов

да школьники любят побегать на переменках, пока люлей не отхватят.

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

Если это какая-то аналогия, о том что go/java быстро приходят и уходят как переменки, а пых - это реальный жизненный урок..

Или ты просто бъешь на школьников на переменах. Физрук?

makoven ★★★★★
() автор топика
Последнее исправление: makoven (всего исправлений: 1)
Ответ на: комментарий от makoven

обэжэшник, ёпрст.

а ты бегай-бегай, пока завуч не пожопил.

anonymous
()
Ответ на: комментарий от lovesan

Прямо таки всегда-всегда сильно ограничивает? У нас тут всего лишь сраный веб, если ты забыл.

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