
Sergey
16.03.2017
18:14:37
housekeeping не более

Artem
16.03.2017
18:15:29
ну во-первых я и говорю что они использовались для реализации стека с информацией для логов, а во-вторых почему не место?
допустим, у тебя бы были гарантии
что плохого?

Google

Artem
16.03.2017
18:16:11
я вполне понимаю что выступаю сейчас адвокатом дьявола, но мне интересно какие именно аргументы у тебя против этого
те же блокировки - это вполне себе бизнес-логика

Sergey
16.03.2017
18:18:05
а если у тебя будет эксепшен в деструкторе где ты его ловить будешь?

Artem
16.03.2017
18:18:17
фатал будет

Sergey
16.03.2017
18:18:21
или если какой-то слип, или что-то что будет занимать время проца. как крайних искать будешь?
из-за чего фатал?

Aleh
16.03.2017
18:18:46
could not throw in destructor :)

Sergey
16.03.2017
18:19:16

Artem
16.03.2017
18:19:20
искать будешь так же, как и всё остальное.

Sergey
16.03.2017
18:19:30
и даже поймать можно

Aleh
16.03.2017
18:19:31
или еще круче
на этапе парса)

Google

Sergey
16.03.2017
18:19:40
нет. можно поймать

Artem
16.03.2017
18:21:09
ну раз можно поймать, то какие проблемы

Sergey
16.03.2017
18:21:20
https://3v4l.org/tgqef
и где это вылезет

Artem
16.03.2017
18:22:04
то есть теперь ты говоришь, что гарантии таки нужны?

Sergey
16.03.2017
18:22:16
я говорю что нехер пихать бизнес логику в деструкторы

Artem
16.03.2017
18:22:32
вопрос "почему?" ответ "потому что нет гарантий"

Sergey
16.03.2017
18:22:55
деструкторы это удалить темповые файлы, закрыть соединения и прочий хаускипинг

Artem
16.03.2017
18:23:17
удаление темповых файлов - это часть логики, снятие блокировок - часть логики

Aleh
16.03.2017
18:23:52
уви https://3v4l.org/lXb9H

Artem
16.03.2017
18:23:56
а в случае блокировок обычно ещё и критично, чтобы блокировка была снята в нужный момент

Sergey
16.03.2017
18:25:34
в случае с пхп блокировки вообще чуть ли не в shutdown калбеке снимать надо

fso
16.03.2017
18:25:40
для блокировок и темповых файлов есть спец инструменты, и незачем велосипедить с деструкторами

Aleh
16.03.2017
18:25:53

fso
16.03.2017
18:26:18
tmpfile()

Artem
16.03.2017
18:26:46
не всегда его можно применить, например, тебе нужно имя файла передать стороннему процессу на обработку

Sergey
16.03.2017
18:26:47
и то, даже shutdown не спасает от SIGTERM/SIGINT. а значит только declare ticks и понеслись отловы сигналов..

Google

Aleh
16.03.2017
18:28:10
так я не понял про блокировки

fso
16.03.2017
18:28:14
о... нагородить можно конечно так что сам себя в угол загонишь. пользуем kiss

Artem
16.03.2017
18:28:28
ну вообще скрипт в любом случае должен быть рассчитан на падение в любой момент, но мы сейчас говорим о нормальной работе всё же

Sergey
16.03.2017
18:28:35
какой еще kiss, чем тебе tmpfile поможет в качестве блокировки?

fso
16.03.2017
18:28:36
и что он тебе даст?
временный файл, который сам удалится как только на него ссылка исчезнет или он будет закрыт
блокировки flock
а tmpfile - это временный файл без велосипедов

Artem
16.03.2017
18:29:08

Sergey
16.03.2017
18:29:10
у меня есть лог файл, в который я хочу писать эксклюзивно. я делаю на него лок и пишу. когда не пишу, лок снимаю
и дело в том что тебе нужно снять лок в любом случае. к примеру SIGINT забьет болт на все твои GC и файл останется заблокированным

Artem
16.03.2017
18:30:27
так после смерти процесса блокировка снимется сама

fso
16.03.2017
18:30:28
для критичных конкурентных операций юзаем очереди. а лочить файл где потенциально может быть запрощен еще один доступ - плохая практика

Sergey
16.03.2017
18:30:29
в чем плохая практика мьютекса то?

Aleh
16.03.2017
18:31:12
а в жавке кстати как?

fso
16.03.2017
18:31:32
flock снимается при завершении работы скрипта

Sergey
16.03.2017
18:31:40
в жавке все синхронизации и локи идут явно не в конструкторе)

fso
16.03.2017
18:32:54
если речь идет именно о сохранении данных в файл с блокированием в процессе, то это фиговая идея хотябы потому, что другие процессы будут ждать. тут либо очередь, либо другая архитектура нужна

Sergey
16.03.2017
18:33:56

fso
16.03.2017
18:34:03
нет.

Google

Artem
16.03.2017
18:34:11

Aleh
16.03.2017
18:34:22
5.3.2 The automatic unlocking when the file's resource handle is closed was removed. Unlocking now always has to be done manually.

Artem
16.03.2017
18:34:41
да это поведение ОС, причём тут пых

Aleh
16.03.2017
18:35:04
ну т.е. только со смертью процесса, да

Artem
16.03.2017
18:35:09
flock() работает через систему и привязан к декскриптору. Дескриптор закрыт - блокировка снята
при смерти процесса, ествественно, все дескрипторы закрываются

fso
16.03.2017
18:36:29

Artem
16.03.2017
18:37:00
не делает, если тебе нужно снимать блокировку отдельно от закрытия файла. Ну и мы не только про файлы говорили, блокировки разные бывают
я, например, часто юзаю GET_LOCK() + RELESE_LOCK() в мускуле

Admin
ERROR: S client not available

fso
16.03.2017
18:38:12
нужно уходить от блокировок. сейчас какой год то? я стараюсь их обруливать всячески, точнее изначально проектирую архитектуру так, чтобы их небыло

Artem
16.03.2017
18:38:42
не вижу причин от них отходить, если это усложняет код и архитектуру

fso
16.03.2017
18:38:54
наоборот, блокировки усложняют) нужно думать как бы там чего не оказалось заблокированным когда ненужно.

Artem
16.03.2017
18:39:55
самое частое - запуск какого-то демона строго в одном экземпляре с учётом того, что серверов много

Sergey
16.03.2017
18:40:39
да элементарно предотвращение оверлапа в кроне

Artem
16.03.2017
18:40:52
угу

Sergey
16.03.2017
18:41:02
когда скрипт выполняется раз в 5 минут, не успевает выполнится и его догняют второй раз

fso
16.03.2017
18:41:13
а, ну да, я почему-то решил, что речь идет о блокировках для обеспечения консистентности записи данных

Sergey
16.03.2017
18:41:15
или скрипт запущен, чет там считает и кто-то заходит его ручками из консоли второй раз запускает

Google

Sergey
16.03.2017
18:44:07
ручные блокировки не приходилось как-то в мускуле юзать)

Danil
16.03.2017
18:49:05
Мы вовсю юзаем select for update, чтобы параллельные запросы не переписывали друг друга

Artem
16.03.2017
18:51:25
ну это другое, хотя транзакцию тоже хорошо бы иметь в виде объекта, но у транзакций проблемы с вложенностью и получается не очень хорошо потому что за ними так и так руками следить приходится
а спецификацию PHP забросили, похоже

Sergey
16.03.2017
18:52:59
кстати о пхп

Artem
16.03.2017
18:53:00
причём забросили в состоянии убитой вёрстки - заголовки в маркдауне неправильно описаны

Sergey
16.03.2017
18:53:05
что думаете по поводу пхп 8?
JIT пока не показывает особых импрувментов

fso
16.03.2017
18:53:39
а где пощупать можно?

Sergey
16.03.2017
18:53:40
есть надежда что заоптимизируют его и выжмут что-нибудь?)
https://github.com/zendtech/php-src/tree/jit-dynasm/ext/opcache/jit
https://externals.io/thread/268 вот тут обсуждения

Artem
16.03.2017
18:55:23
а они llvm'овский jit заюзали или свой пилят?

Sergey
16.03.2017
18:55:31
свой пилят
как в HHVM)

Artem
16.03.2017
18:55:50
hhvm ещё пилят?

Sergey
16.03.2017
18:55:56
да, недавно релиз был
в феврале

Aleh
16.03.2017
18:56:36
да у фейсбука вообще проблемы с развитием языков
hack, flow
все как-то не оч