
Евгений
21.06.2017
18:31:26
но хорошего обоснования я дать не могу
А ты щас на чём-то кроме хаскеля пишешь? Вообще единственная проблема в том, что можно случайно не поместиться в System F2 и тогда нужно будет руками типы разрешать

Даниил
21.06.2017
18:31:31
конкретные команды определены в локальном vimrc, который запускается из глобального и игнорируется гитом

Евгений
21.06.2017
18:31:58
Тут про хаскель, а вы редакторосрач продолжаете

Alexander
21.06.2017
18:32:02

Google

Евгений
21.06.2017
18:32:18
Мне кажется, что у тебя какой-то страх перед абстрактным полиморфизмом, по-крайней мере я других источников не вижу для твоего скепсиса
Либо приведи хармфул код

? animufag ?
21.06.2017
18:40:20

Alexander
21.06.2017
18:40:47
ну например для работы с базой которое тонкое FFI над IO делать MonadIO везде

Vasiliy
21.06.2017
19:47:50
А в идрисе чокак с system f?
я читал, что в идрисе нечто совершенно отличное от system f, но я в теории вообще никак, так что никак прокомментировать не могу

Alexander
21.06.2017
19:49:12
оно не для всех монад справедливо
у которых есть MonadBaseControl IO
раньше еще всякие баги были но поправили их

Vasiliy
21.06.2017
19:52:59
это типа State, когда неизвестно, какой в итоге стейт получится?

Alexander
21.06.2017
19:53:34
когда есть зависимость от ThreadId или мутабельный стейт
например в ResourceT есть зависимость, что все треды форкающиеся должны инкрементить счетчик

Google

Alexander
21.06.2017
19:54:07
и декрементить по завершению
этого в lifte-async не будет
или в Process тоже получится что 1 ProcessID будет у двух тредов
со всеми радостями

Vasiliy
21.06.2017
19:55:45
гм, ну это уже какие-то изощрённые ситуации, походу
во всяком случае, у меня не было необходимости иметь дело с ThreadId
и, надеюсь, не придётся, хотя угроза нависла
сопсна, вопрос такой - есть задача сделать простенький супервизор процессов
сходу нагуглился Angel, но он сделан в виде приложения, а мне бы что-то библиотечное, чтоб в свой сервис встроить https://github.com/MichaelXavier/Angel
вопрос такой - насколько много подводных камней, если делать всё самому?
возможно, проще будет взять этого ангела и вырефачить что-то в библиотеку?

Denis
21.06.2017
20:00:26
квык чек ин жс :D https://github.com/jsverify/jsverify

Alexander
21.06.2017
20:02:17
Vasiliy там неявные зависимости могут быть
why not use systemd?
или s6?

Vasiliy
21.06.2017
20:03:09
systemd олрэди ин юз, но с ним возникают проблемы
нужно иметь возможность из приложения запускать/останавливать сервисы, переходить между таргетами итд
вариант1, который сейчас в работе - дёрганье systemctl с аргументами, вариант2 - dbus api, с которым тоже куча приколов

Alexander
21.06.2017
20:05:07
мы sytemctl дергали
но нам не нужны были нотификации о смерти и т.п.

Google

Alexander
21.06.2017
20:05:39
дешево и сердито, если прав хватает

Vasiliy
21.06.2017
20:06:06
ну вот конкретная задача, после которой я задумался о собственном супервизоре - нужно через http-интерфейс залить бэкап в базу

Alexander
21.06.2017
20:06:28
+ в systemd уже принесли временные и параметрические юниты

Vasiliy
21.06.2017
20:06:31
ну что там - считали бэкап, положили все сервисы, которые сейчас с базой работают, залили бэкап, подняли всё обратно
я это делал дня три
вот, собственно, и появились мысли, что зоопарк и субд и демонов проще мониторить руками, чем systemd

Евгений
21.06.2017
20:09:23
Управлять докерконтейнерами в сотню раз проще чем процессамм

Vasiliy
21.06.2017
20:14:03
но докер добавит кучу своего геморроя...
поясню ситуацию - есть основной, так сказать, продукт, с которым работают простые люди, есть демон, который помогает этим людям выполнять административные функции без залезания в консоль
этот демон занимается обновлениями, бэкапами, перезапуском этого продукта итд
продукт - типа LAMP из пачки демонов

Vladimir
21.06.2017
20:16:50

Vasiliy
21.06.2017
20:18:06
собственно, про демона и вопрос - сейчас управление процессами сводится к тыканию systemctl, но с ним вылезают разные приколы, возникла мысль сделать своего супервизора

Евгений
21.06.2017
21:18:27

Max
21.06.2017
21:56:20
Контейнеризация - это тема.
Но...
Есть и минусы.

Alexander
21.06.2017
22:09:16
ну если четко понимать что нужно и как это делается, то можно запилить лучше для себя

Google

Alexander
21.06.2017
22:09:38
хотя бы на основе чего-либо мелкого

Dmitry
22.06.2017
06:49:13
всё таки, как лучше делать многопоточное приложение, которое что-то там читает, считает и пишет на диск? мне кажется, что считать и писать в одном потоке нецелесообразно - судя по простоям, которые видно в графике загрузки, причем простои довольно одинаковые, периодичные и синхронные. Не лучше ли писать в одном потоке, считать в куче других - и между ними сделать какой-нибудь channel / queue ?
т.е тупо генерить ленивый список, нарезать на чанки и потом писать - кажется не слишком оптимальным решением
вопрос - стоит ли связываться со всякими синхронизированными очередями/каналами, не вносят ли они в нашем уютненьком слишком большой оверхед?

Евгений
22.06.2017
06:57:29
Лучше писать в n потоках, где n количество ядер

Dmitry
22.06.2017
06:59:38
есть ощущение, что тормозит вывод - поскольку это обновление базы
и со временем там увеличивается время записи
не лучше ли отдать больше времени на обсчёт, ну и пускай растёт очередь?

Alexander
22.06.2017
07:21:51
@voidlizard bounded channel / conduit-stm
n потоков обработки, которые из очереди читают
можно попытаться со strategies (parallel и генерить чанки, то там может быть все сложнее)

Dmitry
22.06.2017
07:23:52
а почему bounded ?
для безопасности? что бы память не жрало если где-то не расссчитал?
стоит ли с этим возиться вообще?

Max
22.06.2017
07:26:53
Ну, нарезать можно в сколько угодно потоков, все равно в ядрышке это упрется в один поток на диск. Зря чтоль бсдшники на линукс псят...

Dmitry
22.06.2017
07:27:41
если в один поток, то достаточно одного потока-писателя

Max
22.06.2017
07:28:03
Да, на один физдиск.
Дисков же может быть много...

Dmitry
22.06.2017
07:28:20
опять я обсуждаю общие вещи тут вместо misc-dev-talks, но тут вопрос - не вносят ли хаскельные примитивы синхронизации слишком большой оверхед
вообще в нашем уютненьком произошел некоторый прорыв - т.е еще пару лет назад распараллеливание означало только то, что все ядра заняты сборкой мусора, а общая производительность падает

Google

Dmitry
22.06.2017
07:29:20
сейчас же даже самое тупорылое распараллеливание даёт приход процентов 30

Alexander
22.06.2017
07:29:48
@voidlizard для того, чтобы память не жрал, и было сбалансировано

Dmitry
22.06.2017
07:29:52
пара = ну два, ну три, но никак не болше пяти

Alexander
22.06.2017
07:30:05
чего толку IO гонять, если CPU не успевает

Dmitry
22.06.2017
07:30:11
ну короче, писать в базу во всех потоках, которые и считают - это ошибка
и приводит к простоям
даже если писать батчами

Alexander
22.06.2017
07:30:24
тем более что оно ни капельки не сложнее, тупо другой импорт
ну и наоборот, чего толку считать, если у нас затык при записи в базу

Dmitry
22.06.2017
07:31:17
ну то, что насчитали можно откладывать в пямяти
если она будет жраться на это - ну и пусть, размеры позволяют
а вот если памяти нет и на диске затык - то да, надо ждать
что же это получается
получается стандартное джава приложение, что ли - две очереди и k + n потоков - очередь на обсчёт, очередь на запись ?
все вот так предельно тупо и никакой хаскельной легкости?

Alexander
22.06.2017
07:33:32
ты можешь сделать обработку списка и призвать parallel
если у тебя там все чистое

Dmitry
22.06.2017
07:33:52
ну чистое, но не очень - файлы-то читаются
сам обсчет правда чистый, но запись

Alexander
22.06.2017
07:34:02
https://hackage.haskell.org/package/parallel-3.2.1.1/docs/Control-Parallel-Strategies.html
концы не в счет
можно ещё conduit-stm