@haskellru

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

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

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

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

Либо приведи хармфул код

? animufag ?
21.06.2017
18:40:20
как вы относитесь к функциям полиморфным по монадке, т.е. MonadIO m => ... -> m a, а не ... -> IO a
А раз уж начал вбрасывать, можешь примерно сориентировать зачем это?

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

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

при этом без косячных реализаций как в lifted-async например
а что именно косячного в lifted-async? какие-то конкретные косяки, какая-то фундаментальная проблема?

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 из пачки демонов

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

Евгений
21.06.2017
21:18:27
но докер добавит кучу своего геморроя...
Какого? Требования по ресурсам только чуть возрастут

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

Страница 309 из 1551