
Pavel
12.03.2018
13:04:10
это да
Но на питоне без подсказок типизации писать вообще кошмар, а с ними хотя бы скрипт быстренько падает когда что-то идет не так.

Денис
12.03.2018
13:16:05

Dmitry
12.03.2018
13:16:55
Да это логично. Отчасти это и пытаемся сделать

Google

Denis
12.03.2018
15:18:24

Evgeny
12.03.2018
15:26:04

Pavel
12.03.2018
15:27:38
Имя потока устанавливается через pthread_setname_nb() или какую-то такую функцию
И во всей юникс системе тред официально имеет установленное название. Написано что это для удобства отладки.
Правда у меня вчера и через c-функцию не получилось установить имя, htop не видит нового имени треда. Буду разбираться еще.

Dmitry
12.03.2018
17:00:19
Павел, а ты в нем включил настройку чтобы он треды и процессы не объединял?

Pavel
12.03.2018
17:07:15
Я уже разобрался в чем проблема, отчасти ты прав https://stackoverflow.com/questions/4461289/change-thread-name-on-linux-htop
Оказывается в htop есть настройка чтобы отображать эти кастомные имена, а иначе он игнорирует
pthread_setname_np нормально заработал
Кто-то может объяснить как именно исполняется код обработчика сигнала? туда просто jmp идет?

Maxim
12.03.2018
18:57:42
подозреваю, поскольку функция-обработчик cdecl, то так она и вызывается
с прологом, эпилогом, все дела, как минимум

Pavel
12.03.2018
18:58:44
Просто непонятно куда при этом девается текущий code flow

Google

Pavel
12.03.2018
18:58:52
текущая точка исполнения фризится?

Maxim
12.03.2018
18:59:36
это хз

Pavel
12.03.2018
19:00:15
That means the signal handler acts out of the standard flow of the control of the program; in fact, the whole program is saved within a context, and a new context is created just for the signal handler to execute in. If you think about it some more, you realize that this is pretty cool, and also a totally new way to view programming.

Maxim
12.03.2018
19:00:20
но, насколько помню, вызвается она не в основном треде программы, поскольку в D видны только переменные __gshared

Dark
12.03.2018
19:02:56
У D есть сабреддит?

Pavel
12.03.2018
19:04:22

Maxim
12.03.2018
19:05:51
Хз, я в подробности не вдавался, но точно помню, что внутри обработчика не видел переменные)
Надо на досуге заполнить пробелы в знаниях

Dark
12.03.2018
19:07:23
А про какие сигналы речь идёт?
https://www.reddit.com/r/d_language/
Если кому-то надо
О, там годнота
http://jordi.inversethought.com/blog/advent-of-d/
Вот например это
Если перевести - получится гораздо объективнее введение

Pavel
12.03.2018
19:25:00

Dark
12.03.2018
19:25:27
Надо самому пополнить знания на эту тему

Igor
12.03.2018
19:28:33
для полноты картны - для евентлупов есть такая штука http://man7.org/linux/man-pages/man2/signalfd.2.html
при этом обычная доставка сигналов в процесс блокируется

Pavel
12.03.2018
19:30:35
о это прекрасно ?

Google

Pavel
12.03.2018
19:30:43
кажется я точно видел такое у вайба
вроде не оно http://vibed.org/api/vibe.core.core/createFileDescriptorEvent

Igor
12.03.2018
19:37:30
не оно, но наверное можно создать signalfd и ждать на нём события

Dark
12.03.2018
19:39:46
Можете мне объяснить, в чем фишка eventloop'а?

Pavel
12.03.2018
19:40:07
Да это же самая прекрасная вещь на земле

Dark
12.03.2018
19:43:04
Не самая
Самая - это интроинспекция
Но фишку эвентлупа я все равно не понимаю

Pavel
12.03.2018
19:43:47
Это так просто не объяснить
Он крутится и передает возможность работать каждому из запущенных файберов/корутин на какое-то время, благодаря чему создается впечатление что файберы работают параллельно
При этом все это происходит легковеснее чем треды.

Igor
12.03.2018
19:45:07
google site:habrahabr.ru eventloop

Dark
12.03.2018
19:51:28
https://habrastorage.org/getpro/habr/post_images/0f0/d38/060/0f0d380605a65ab59204c3e531382687.png
Так все понятно

Stanislav
13.03.2018
02:46:38
А кто-нибудь знает, хотят добавить в фобос std.eventloop или нет?

Denis
13.03.2018
04:51:34
судя по всему, std.event или std.eventloop это vibe-core

Stanislav
13.03.2018
05:47:33
ну если хотение есть, может хотя бы кто-нить пилить будет

Maxim
13.03.2018
05:49:49
сам по себе eventloop будет бесполезен, нужно будет еще что-то типа std.asyncio, иначе чтение/запись фалов будет тормозить все файберы)
что-то я в std не могу найти биндингов для aio_read/aio_write

Google

Dark
13.03.2018
05:57:11
У кого-нибудь было такое, что dub build использует проц на 100%, чем подвешивает систему?

Evgeny
13.03.2018
06:07:44

Maxim
13.03.2018
06:08:11
я это понял)

Evgeny
13.03.2018
06:08:16

Dark
13.03.2018
06:09:24

Evgeny
13.03.2018
06:12:31

Stanislav
13.03.2018
06:19:27
а есть где поподробнее почитать про ети файберы?
я думал если запустить файбер с чтением\записью, то он ничего тормозить не должен.
я только с обычными pthread работал, там всё честно :)

Maxim
13.03.2018
06:21:10
https://tour.dlang.org/tour/en/multithreading/fibers
грубо говоря, файберы — это способ сделать в D кооперативную многозадачность, которая работает на одном или нескольких потоках

Admin
ERROR: S client not available

Maxim
13.03.2018
06:22:46
когда файберу нечего делать, он делает yield, и в этот момент управление может передаваться другим файберам, таким образом создается иллюзия параллельного выполнения
но если файбер получил управление и ушел в долгий цикл без yield, все остальные файберы будут его ждать

Stanislav
13.03.2018
06:24:23
а если несколько тредов выделить файберам, то 1 тормозящий файбер в теории ничего не поломает же?

Maxim
13.03.2018
06:24:42
зависит от планировщика)
кто тут знатоки, помогите объяснением)

Stanislav
13.03.2018
06:25:56
я вот доку почитал, но чет там написано маловато для такой обширной темы как мне кажется.

Maxim
13.03.2018
06:26:27
планировщик Go, например, может перекидывать горутины из потока в поток, есть ли такое в D, яхз, vibe-core вроде по потокам раскидывает файберы, но вот перекидывает ли их между потоками — не знаю)

Dmitry
13.03.2018
06:33:49
Нет перекидывать не может
Людвиг посчитал это усложнением дизайна

Evgeny
13.03.2018
06:37:00

Google

Dmitry
13.03.2018
06:37:59
А. Логично.
В го же его вроде нет

Maxim
13.03.2018
06:39:02
в общем, в любом случае лочить файберы чтением/записью — плохо, поэтому к эвентлупу в фобос нужно будет добавлять и асинхронный ввод-вывод)

Dmitry
13.03.2018
06:39:46
А он как организуется?

Maxim
13.03.2018
06:40:31
в posix-совместимых ОС можно через aio
например, запустить чтение, и пока оно не закончено, в цикле делать yield)

Dmitry
13.03.2018
06:41:13
А как оно выглядит если ничего не лочит? Это же поток или что?

Maxim
13.03.2018
06:41:20
ну это такой прямой наивный способ)

Dmitry
13.03.2018
06:42:21
Короче тот же файбер только в цикле?

Maxim
13.03.2018
06:42:43
типа того
тот же файбер, только пока он ждет заполнения буфера, вызывает yield, чтобы другие файберы могли что-то делать

Denis
13.03.2018
06:44:10

Dmitry
13.03.2018
06:44:18
Как устроен механизм информирования что буфер уже заполнен?

Denis
13.03.2018
06:44:27
Например я однажды словарь человеческих имён в шаблон запихнул и был такой эффект подвешивания

Maxim
13.03.2018
06:44:39

Denis
13.03.2018
06:45:08

Maxim
13.03.2018
06:45:21
хотя, вот в интернетах говорят, что использовать aio — не комильфо)

Evgeny
13.03.2018
06:46:45
aio - говно, не используйте его никогда
хотя для дисковых операций вполне годно

Dmitry
13.03.2018
06:47:11
Альтернатива?

Evgeny
13.03.2018
06:47:33
для сети - говно, на макосях AIO только для дискового ввода-вывода работает

Maxim
13.03.2018
06:48:11
ну так-то я и имел в виду именно дисковые операции