
Dmitry
17.06.2017
08:55:50
Это именно системный тред будет?

Dmitry
17.06.2017
08:55:55
Да
Еще можно использовать task() из std.parallelism или spawn() из std.concurrency

Dmitry
17.06.2017
08:59:54
spawn это просто обертка над core.thread?

Google

Dmitry
17.06.2017
09:01:50
в каких случая чистый core.thread удобнее?

Dmitry
17.06.2017
09:16:58
Обертка, да

Denis
17.06.2017
09:29:35

Dmitry
17.06.2017
09:42:38
C core.thread можно указать размер стека для запускаемого потока. В обертках из std я такого не припомню.

Denis
17.06.2017
09:51:26
размер стека это аппаратная особенность? когда тред создаёшь всегда задается размер и сразу под него память выделяется?

Dmitry
17.06.2017
10:12:11
Не аппаратная, софтверная. Обычно при создании потока решается и выделяется. Но бывает, как в Го, когда стек во время работы могут выделить новый побольше и перенести данные туда. Так они там растут в горутинах по мере надобности.

Ned Ogl
17.06.2017
11:06:55
Другое дело. А кому зачесалось на D перейти?
Надоел срр?

Friedrich
17.06.2017
11:07:31
Не нужно никаких "перейти". Хочется просто использовать для каждой задачи максимально подходящие инструменты.

Ned Ogl
17.06.2017
11:08:18
Я вот ОСь пилю
Срр - хорошо, но плохо
Потому Д

Google

Friedrich
17.06.2017
11:08:50
Ну, как я вижу применение D — это для метапрограммирования и интеропа с низким уровнем.

Ned Ogl
17.06.2017
11:09:06

Дед Пегас
17.06.2017
11:09:22
Мне vibe.d понравился и я пишю щас местечковый картинкохостинг.

Friedrich
17.06.2017
11:09:32
А я его пробовал и мне не понравился.
А вот D как язык просто прекрасен, мне очень нравится.

Дед Пегас
17.06.2017
11:12:07
У меня ВНЕЗАПНО крайне тупой вопрос.
У массива есть функция добавления а ля append или push, которую можно использовать как делигат в listDirectory?

Dmitry
17.06.2017
11:24:58
int[] a = [ 1, 2 ];
auto app2 = appender(a);
app2.put(3);
app2.put([ 4, 5, 6 ]);
writeln(app2.data); // [1, 2, 3, 4, 5, 6]
std.array : Appender
А проще auto xs = dirEntries(".", SpanMode.shallow).array;

Дед Пегас
17.06.2017
11:30:05
Ага, спасибо!

Denis
17.06.2017
12:06:38

Pavel
17.06.2017
12:07:13
Про треды тоже немного
горутины перекидываются на другие треды когда нужно

Dmitry
17.06.2017
12:08:23
разве?
ай да

Dmitry
17.06.2017
12:08:29
Разница в способе переключения, но у каждой горутины свой стек, как у потока.

Dmitry
17.06.2017
12:08:31
перепутал с файберами

Denis
17.06.2017
12:08:41
Когда нужно это когда?
Не запилить ли нам такие комбинированные треды?

Google

Pavel
17.06.2017
12:09:50
Ну я не настоящий гошник, но по-моему когда видно что в горутине началась блокирующая операция или что-то такое. Тогда ее среда может начать пропихивать на другие треды, чтобы в текущем осовбодить время для других горутин.
То есть может у нас что-то и получится, но это будет жалкая поделка.

Denis
17.06.2017
12:20:30
Про gc я бы согласился, а вот треды это просто
Там не в блокирующей операции дело, там надо загруженность ядра измерять КМК
Или у ОС интересоваться
А, туплю

Dmitry
17.06.2017
12:27:28
Там драйвер вроде должен тоже уметь делать неблокирующие операции и стучать что данные пришли

Denis
17.06.2017
12:33:41
Горутина это вообще другое
Млин не та ссылка https://m.habrahabr.ru/post/141853/
Вроде как это ровно наши файберы
И всё, по ядрам они не скачут

Pavel
17.06.2017
12:37:37
Ты только учти что статья 2012 года :)

Denis
17.06.2017
12:37:49
Точнее, им однажды ядро присваивают
Всё поменялось? Есть свежее описание?
Аналоги каналов нам завезли?
https://wiki.dlang.org/Go_to_D

Pavel
17.06.2017
12:43:48

Denis
17.06.2017
12:44:26
Машина это ядро, как я понял. Ядро при старте горутины выбирается

Pavel
17.06.2017
12:44:56
Не, ядро это часть CPU :) В ядре тред, в треде машина, в машине горутина :)

Google

Denis
17.06.2017
12:45:40
Разве? А смысл этих машин тогда?

Pavel
17.06.2017
12:50:44
Вот ответ от автора статьи :)
То есть получается что когда горутина начинает блокирующую операцию, она ставится в очередь, а из очереди может в другой тред уйти

Denis
17.06.2017
12:52:14
Ага, накрутили

Andrey
17.06.2017
12:52:50
каким макаром она уйдет, интересно...

Denis
17.06.2017
12:52:54
Интересно как они определяют блокировку

Pavel
17.06.2017
12:52:55
А смысл этих машин наверно и есть в том чтобы следить за такими операциями и обеспечивать параллелизм

Admin
ERROR: S client not available

Pavel
17.06.2017
12:53:57
Ну в общем даже Александреску в своем ответе на кворе хвалил ребят из команды го и говорил что они очень крутые инженерные решения придумывали до текущего времени.

Denis
17.06.2017
12:54:50
И gc у них не тормозит мир
Вроде
Поглядим, чо
В ди вроде такое не запилить сейчас
Интересно какой реальный прирост даёт возможность движения горутин между ядрами
Щщенки!(с)

Pavel
17.06.2017
13:03:37
Прирост по сравнению с чем? Ну это же получается типичная модель системы массового обслуживания. Из очереди берется горутина и отправляется в свободную машину выполняться

Dmitry
17.06.2017
13:03:45
В D "глобальные" переменные все thread-local, если корутина в другом потоке окажется, потеряет эти данные. А переносить их вместе с ней - слишком много мороки...
GC в Go мир тормозит, но ненадолго (зато часто), остальное время работает параллельно. Для чего используются write barriers - каждая запись в указатель имеет накладные расходы.

qwerty
17.06.2017
13:06:57
http://vpaste.net/wsR8S в таком коде GC будет вызываться каждую итерацию цилка?

Google

Dmitry
17.06.2017
13:12:59
Нет, с чего бы ему вызываться?

Дед Пегас
17.06.2017
13:31:21
Вот с этим вот работал? https://github.com/callumenator/imaged
Заброшен, похоже...
А есть чо свежее по работе с изображениями?
Достаточно ресайза.

Dmitry
17.06.2017
13:47:39
https://github.com/gecko0307/dlib ?

qwerty
17.06.2017
13:47:50
https://dlang.org/blog/2017/03/20/dont-fear-the-reaper/
Closures, which are delegates or function literals that need to carry around a pointer to the local stack frame, may also allocate

Dmitry
17.06.2017
13:49:53
Замыкание с этой переменной будет создано один раз - когда функция с этой переменной вызвана. Дальше внутри указатель на нее будет в цикле использоваться, но уже без аллокаций.

qwerty
17.06.2017
13:50:08
спасибо!

Dmitry
17.06.2017
13:50:10
Т.е. замыкание живет снаружи этого цикла

qwerty
17.06.2017
13:51:12
так стоп

Dmitry
17.06.2017
13:51:32
http://thedeemon.livejournal.com/82779.html

qwerty
17.06.2017
13:51:33
а может переменные захватываетмые замыканиями живут снаружи?
иначе как к ним полчит доступ замыкание?

Dmitry
17.06.2017
13:53:08
См. мой пост в ЖЖ

qwerty
17.06.2017
14:04:30
"снаружи" значит в heap?
просто у Вас как раз и написано, что переменные, которые захватываются замыканиями живут в heap
аа, все
снаружи цикла
невнимательно прочитал