Pull to refresh
21
0.9
Эд Нерский @ednersky

Зрящий в суть, указующий путь.

Send message

когда Python помрёт точно не знаю. Например в 2015 году ещё было трудно предсказать, что Perl помрёт к 2020, а он возьми и помри.

Смерть языков - понятие связанное с модой и поветриями, а не объективными параметрами.

а вот что и через 5 и через 10 лет не будет устранён GIL - на это я готов поспорить.

Еще раз — все кто хоть раз серьезно сталкивался с многопоточным программированием об этом знают.

Но если бы знали как в общем виде отвечать на эти вопросы, то в python делали бы не GIL, а вот это вот "(по)объектное блокирование"

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

а просто эти труизмы, очевидно, останутся именно труизмами. Вы просто этого ещё не осознали, а я уже да :)

Как говорится, "Запомните этот твит": GIL убрать не смогут - раньше Python просто своей смертью помрёт (выйдет из широкого употребления в пользу чего-то другого).

А я помню чем закончился спам от Центра Американского Английского

Его основателю ударили тяжёлым предметом по голове. Насмерть.

И спам сразу же прекратился.

Следствие, правда, не увязывало случившееся со спамом, однако интернет очень даже увязывал.

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

и это, этот гвоздемёт был ЕМНИП в рекламе Fallout3

Во-первых, я не говорил о списках на атомиках, я написал про объектные блокировки, это несколько иное.

а объектные блокировки будут чрезвычайно сложны

a, b, c = 1, 2, 3

какие объекты нужно блокировать? Очевидно, a, b, c.

Но проблема там не в том, что переменная это структура данных, а в том, что Python поддерживает длинную арифметику

помимо длинной арифметики, нужно ведь и понятия "строки" поддерживать. Помимо строк есть ещё объекты

self.a, self.b = other.a, other.b

Вот здесь сколько объектов требуется заблокировать?

Как только берём более одной блокировки, то в этот момент возникает вопрос дедлоков. Да, если количество блокируемых объектов определено статически, то с дедлоками проблема решается, но ведь это не всегда так

for bla in self.bla:
  bla.foo = self.something()

Здесь очевидно, что объект self блокируется в момент начала цикла. А bla можно заблокировать познее. Вроде бы. Однако что если bla заблокировал другой процесс, которому ПОТОМ понадобится self?

В том же питоне, GIL вам не запрещает работать с одним и тем же объектом из разных потоков (например, пополнять список).

список на атомиках не делается: двое перезаписывают хвост и кто-нибудь да выиграет

и работа с переменными питон тоже на атомиках не получится: переменная — это структура данных

ну да, it мало отличается от, например, строительства

новых технологий нет, развитие экстенсивное (увеличивается только количество)

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

https://habr.com/ru/articles/560010/

как правило DDoS'ом называют собственную некомпетентность:

накосячили что-то с архитектурой, она не смогла держать штатную нагрузку, сваливаясь в положительную обратную связь. Ну а логов нормальных нет, мониторинга нормального нет - понять ничего нельзя, а потому объявляем "нас DDoS'ят!"

как-то так

Вам же я процитирую PEP703, который вы не читали, как и код, на который даны ссылки

эм, очень часто разработчики что-то делают, ПОНИМАЯ, что так делать нельзя. Ну вот вы и процитировали пример.

как можно отменить GIL? Только отменив треды как таковые.

это будет очень правильное решение, но на это, увы, никто не пойдёт.

слушайте, вот есть физика

две функции и переменная

x = 10

def inc():
    x = x + 1

def dec():
    x = x - 1

этот же вопрос любому понятен: если функции вызываются из разных процессов (=потоков), то без мютексов такой код будет работать только если переменная x может меняться атомарно. То есть на C с атомарными переменными подобный код писать можно, да.

Но в ЛЮБОМ скриптовом языке переменная - это структура. Её атомарно не заменить. Соответственно присвоение нового значения = присвоение нескольких полей структуры = изначально неатомарное действие.

А потому язык, допускающий подобный синтаксис будет или иметь GIL на борту или приводить к UB.

В общем случае гарантировать отсутствие крешей при UB очень сложно, а потому GIL из питона не уйдёт. НИКОГДА.

то есть записываем: GIL в питоне ВСЕГДА будет мешать тредам.

Теперь вопрос: а как же тогда масштабироваться по процессам?

Правильный ответ: POSIX::fork и POSIX::IPC

Возможный правильный ответ: запрет на уровне языка шарить переменные между тредами - но сюда разработчики Python не пошли

Соответственно, применение тредов в Python - полумера, признак слабой компетентности.

Как-то так

ну ХЗ

вот в супермаркете же находился гвоздемёт, вот убервафля была (всего-то 1.5x урон по отношению к среднему, но выстрелы реееееедкие) - стреляет тихо и даже тяжёлые противники - трупы с одного попадания

в ВАТС вам нужна была большая дистанция или тихое оружие.

и стрельба украдкой. всё.

всё как в F1,F2 :)

то что Вы говорите относится к F3+DLC

в чистом F3 он именно убивал (конечно надо было вложиться в развитие перса).

прямо ровно один выстрел - один труп было.

и это прямо ощущалось от одной из первых миссий (квестов) - в супермаркете.

вот когда я вынес (правда с четвёртой попытки) рейдеров супермаркета - всех издалека, всех в ватс, всех по тихому, я понял, что F3 - есть продолжение F2

Вот представьте, зашли вы в подземку — на вас издалека ломанулся пяток гулей, вы включаете V.A.T.S.…

ватс был хорош для стелс-снайпера

выстрел из укрытия = труп

враги где-то бесятся бегают, а ты ныкаешься

а вот на первом же DLC F3 баланс поломали — появились звери, полуголые люди, которых не убить и десятью выстрелами из стелса, ну и ватс перестал роялить

особенно жутко было в Ф4, там временами казалось, что оружие в этой игре вообще без смысла

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

хз, не помню разницы между 3 и 4

система прокачки несколько поменялась, это да

А где я говорил, что люблю тройку?

а мне тройка понравилась больше всех серий 3+

в тройке с ДЛЦ и далее уже сломали баланс: стреляешь из хорошего ружья в дикаря с голым торсом или собаку и нужно 20-40 выстрелов, что ее, наконец, укокошить. в Ф3 такой фигни не было

а ещё в тройке было атмосферное (в русской озвучке) радио

прям как сейчас помню — остановился и так заслушался радио китайской пропаганды, аж меня кентавры сожрали

и ведь тексты были такие, что и сейчас их снова можно на радио транслировать: "шайка жирных котов с Уолл-стрит"... лепота

Причём шутер, в котором плохо реализована стрельба, что вытекает в вялый импакт, от чего тактильные ощущения при использовании разного оружия почти не различаются. Эту проблему признавали и сами разработчики, но смогли исправить её лишь в Fallout 4, пригласив специалистов из id Software.

играл и в 3 и в 4 и не помню, чтоб в стрельбе там были какие-то отличия

почему-то вспомнился интернет эпохи первых блогов.

Артемий Лебедев: "Я сходил в туалет!"

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

Слушайте, ну вот зачем тащить в скриптовый язык треды? Ведь это изврат!

Ладно бы в приложениях это делали, но постоянно на это натыкаешься в библиотеках. Вроде бы на чистом asyncio что-то написал, потом однажды заглянешь в ps а там... и начинаешь раскопки: кто?, когда?, где?, зачем?

и конечно же эти треды оказываются в самом ненужном месте - каком-нибудь парсере.

Блин.

А вы почему-то пытаетесь.

я указываю, что есть две дороги

  1. с количеством страданий Х

  2. с количеством страданий Х/10

Нативные тоже оформлять будете

компилятор или интерпретатор может оформить все функции как с промисами

1
23 ...

Information

Rating
1,748-th
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity

Specialization

Backend Developer, Fullstack Developer
Lead
From 1,000,000 ₽
Python
Perl
PostgreSQL
Tarantool
Linux
Lua
C
JavaScript
HTML
Rust