Size: a a a

2021 February 21

g

gui in dlang.ru
Евгений
Что за кошмарный кусок?
Что это такое?
fibs.map!(f => f.call()).any!(t => t);
видимо такой способ вызвать все файберы в массиве при помощи map
источник

Е

Евгений in dlang.ru
gui
видимо такой способ вызвать все файберы в массиве при помощи map
дык each же есть для этого?
источник

g

gui in dlang.ru
хотя можно сделать fibs.each!(f => f.call());
источник

g

gui in dlang.ru
Евгений
дык each же есть для этого?
ага
источник

g

gui in dlang.ru
но походу автор этого не знал
источник

Е

Евгений in dlang.ru
Я только что миллион файберов создал как нехер делать. Ща еще вывод времени сделаю и выложу код.
источник

O

Oleg in dlang.ru
ты написал такой же код как мой, только с each и он свой.. и продолжаешь его "улучшать".. "цель рождения?"
источник

g

gui in dlang.ru
я твой код и не видел, только этот кусок
источник

O

Oleg in dlang.ru
в моем без each просто поменяв стек на 8*1024 я создал вчера 10млн фибр.. до этого было 3млн.. уже понятно, что можно миллионы создать.. что улучшаешь то?
источник

Е

Евгений in dlang.ru
Oleg
в моем без each просто поменяв стек на 8*1024 я создал вчера 10млн фибр.. до этого было 3млн.. уже понятно, что можно миллионы создать.. что улучшаешь то?
Я ничего не улучшаю. Я отвечаю на сообщение @egorpugin  Пишу свой кусок.
источник

Е

Евгений in dlang.ru
import core.thread;
import std.stdio;
import std.algorithm;
import std.datetime.stopwatch;

const numFibers = 1_000_000;
const stackSize = 4 * 1024 * 1024; // 4 Mb

void worker() {
   Fiber.yield();
}

void main() {
   auto fibers = new Fiber[numFibers];

   auto results = benchmark!({
       foreach(ref f; fibers) f = new Fiber(&worker, stackSize, 0);
   }, {
       fibers.each!(f => f.call());
   })(1);

   writefln("create: %s", results[0]);
   writefln("run:    %s", results[1]);
}
источник

Е

Евгений in dlang.ru
На моей машине:
$ ldc2 -O3 --run test.d
create: 2 secs, 352 ms, 162 μs, and 3 hnsecs
run:    236 ms, 594 μs, and 5 hnsecs
источник

Е

Евгений in dlang.ru
Ось бубунта
источник

Е

Евгений in dlang.ru
Стек файбера 4 мегабайта
источник

Е

Евгений in dlang.ru
Я отключил гвард пейдж, потому что на моей системе стоит лимит, который мне было лень повышать.
источник

Е

Евгений in dlang.ru
Оверкоммит, конечно не лучшее решение на мой взгляд. Не люблю ООМ-киллер, за его непредсказуемость.
источник

Е

Евгений in dlang.ru
Файберы сильно упрощают написание асинхронного IO. Пишем синхронно, фактически работает асинхронно, а с применением нескольких потоков, еще и параллельно.
источник

Е

Евгений in dlang.ru
То есть цель файберов не повышение производительности, а упрощение и снижение вероятности появления багов.
источник

DH

Dark Hole in dlang.ru
Egor Pugin
с чатом ничего
>ничего
>постоянно доказываешь что памяти мало
источник

EP

Egor Pugin in dlang.ru
Dark Hole
>ничего
>постоянно доказываешь что памяти мало
это рассказ, а не доказательство, дальше желающие сами подумают, сделают выводы
источник