@dlangru

Страница 193 из 719
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
в каких случая чистый core.thread удобнее?
Хороший вопрос, подписался на каменты

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
Не нужно никаких "перейти". Хочется просто использовать для каждой задачи максимально подходящие инструменты.

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

Дед Пегас
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
Ага, спасибо!

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
Точнее, им однажды ядро присваивают
А что значит им присваивают ядро? Я так понимаю что на каждую машину и выделен 1 тред, в котором она работает.

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

аа, все

снаружи цикла

невнимательно прочитал

Страница 193 из 719