Здравствуйте, CoderMonkey, Вы писали:
I>>Похоже, тебе трудно три клика мышом сделать
CM>А потом ты опять юлить начнешь про неправильный код. Нет уж, давай точно показывай.
Надеюсь мне не придется еще один месяц объяснять, как его запустить ?
I>>Сколько именно — это надо отдельно замерять.
CM>Замеряй. А то намусорить все горазды, а прибираться кто будет?
Это уже не интересно. У меня были предположения, что
1 аномалия, т.е. первый результат самый лучший, уйдет после выхода нода на новом движке V8
2 результат показывает нижнюю границу для производительности JS на конкретном железе.
3 Производительность node упирается в частоту памяти и частоту шины
Все предположения подтвердились.
Если тебе хочется знать, сколько именно ест GC, создай новую тему.
public static class Sorting
{
public static void Test()
{
var repeatCount = 10;
var itemsCount = 1000_000;
int Compare(TestClass x, TestClass y) => string.CompareOrdinal(x.Id, y.Id);
for (var i = 0; i < repeatCount; i++)
{
var initWatch = Stopwatch.StartNew();
var vals = Enumerable.Range(0, itemsCount).Select(x => new TestClass()).ToArray();
initWatch.Stop();
Console.WriteLine($"Init: {initWatch.Elapsed.TotalMilliseconds}");
var watch = Stopwatch.StartNew();
QuickSort(vals, Compare);
watch.Stop();
Console.WriteLine($"Sort: {watch.Elapsed.TotalMilliseconds}");
}
if (Debugger.IsAttached)
Debugger.Break();
}
public static void QuickSort<T>(T[] vals, Func<T, T, int> compare)
{
QuickSort(vals, compare, 0, vals.Length - 1);
}
public static void QuickSort<T>(T[] vals, Func<T, T, int> compare, int left, int right)
{
if (right <= left)
return;
var i = left;
var j = right;
var mid = (int)(((long)left + right) / 2);
var midVal = vals[mid];
while (i <= j)
{
while (compare(vals[i], midVal) < 0)
{
i++;
}
while (compare(vals[j], midVal) > 0)
{
j--;
}
if (i <= j)
{
var tmp = vals[i];
vals[i] = vals[j];
vals[j] = tmp;
i++;
j--;
}
}
QuickSort(vals, compare, left, j);
QuickSort(vals, compare, i, right);
}
}
class TestClass
{
public readonly string Id;
public readonly string Value;
public TestClass()
{
Id = CreateId();
Value = CreateId();
}
static readonly Random RandomGen = new Random();
static string CreateId()
{
var num = (long)Math.Floor(RandomGen.NextDouble() * Math.Pow(10, 16));
var res = num.ToString(Format, CultureInfo.InvariantCulture);
return res;
}
static readonly string Format = new string('0', 8);
public override string ToString()
{
return Id;
}
}
I>Это уже не интересно. У меня были предположения, что I>1 аномалия, т.е. первый результат самый лучший, уйдет после выхода нода на новом движке V8
И? I>3 Производительность node упирается в частоту памяти и частоту шины
По твоему, это оправдание? А по моему, это полный провал жабаскрипта. Мало того что тормозит, так еще и не масштабируется, как уже было совершенно справедливо отмечено.
Полагаю, ты считаешь эти фрагментa кода эквивалентными ? Надо объяснять, что первый вариант заведомо быстрее, независимо от языка ?
Запусти тогда вот эту версию:
JS simple random
'use strict';
const N = 1000*1000;
const re = /-/g;
function Main(number) {
let watch = Date.now();
let vals = ToArray(Select(Range(0, number), x => new TestClass()));
let compare = (x, y) =>{
if(x === y)
return 0;
if(x > y)
return 1;
return -1;
};
console.warn(`Init, miliseconds: ${Date.now() - watch}`);
watch = Date.now();
QuickSort(vals, (x,y)=>compare(x.Id, y.Id));
console.warn(`Sort miliseconds: ${Date.now() - watch}`);
}
function QuickSort(vals, compare){
QuickSortImpl(vals, compare, 0, vals.length - 1);
}
function QuickSortImpl (vals, compare, left, right) {
if (right <= left)
return;
let i = left;
let j = right;
const mid = Math.floor((left + right) / 2);
const midVal = vals[mid];
while (i <= j) {
while (compare(vals[i], midVal) > 0) {
i++;
}
while (compare(vals[j], midVal) < 0) {
j--;
}
if (i <= j) {
const tmp = vals[i];
vals[i] = vals[j];
vals[j] = tmp;
i++;
j--;
}
}
if(left < i - 1) {
QuickSortImpl(vals, compare, left, i - 1);
}
if(right > i) {
QuickSortImpl(vals, compare, i, right);
}
}
class TestClass {
constructor() {
this.Id = CreateGuid();
this.Value = CreateGuid();
}
toString() {
return this.Id;
}
}
function ToArray(iterator) {
return [...iterator];
}
function* Range(start, end) {
for(let i = start; i<end; i++) {
yield i;
}
}
function* Select(iterator, projector) {
for(let x of iterator) {
yield projector(x);
}
}
function CreateGuid() {
return NewGuid().toString().replace(re, "");
}
function NewGuid() {
return ''+Math.floor(Math.random()*Math.pow(10,16));
}
function delay(time) {
return new Promise((resolve)=>{
setTimeout(resolve, time);
});
}
for(let i = 0, promise = Promise.resolve(); i<100;i++) {
promise = promise.then(()=>Main(N)).then(()=>delay(1000));
}
I>>Это уже не интересно. У меня были предположения, что I>>1 аномалия, т.е. первый результат самый лучший, уйдет после выхода нода на новом движке V8 CM>И?
Ты же срал кирпичами без малого полгода и настаивал, что это де случайность и вообще враньё. Выходит, что это особенность виртуальной машины. I>>3 Производительность node упирается в частоту памяти и частоту шины CM>По твоему, это оправдание? А по моему, это полный провал жабаскрипта. Мало того что тормозит, так еще и не масштабируется, как уже было совершенно справедливо отмечено.
Возможно ты не заметил, но именно эту особенность демонстрировал тебе ажно два сезона. Только после очередной подсказки тебе стало "понятно". До того ты полгода утверждал, что такого быть не может и что я де наврал.
Здравствуйте, Ikemefula, Вы писали: I>Важно что твоё быстрое не может внятно обогнать моё тормозное
Что-то ты, родной, совсем заврался. Разница в 2-6 раз, и совсем не в пользу жабаскрипта. И я даже оптимизировать пока не пытался. I>И вот опять та же история — какую _именно_ версию нода ты запускал ? Судя по результатам это какая то из 9.х.
Вечно, родной, у тебя какая-нибудь версия не та
Это была 8.10
А вот 9.8:
Всё равно медленнее, вот ведь досадная неудача.
Кстати, похоже на то, что у тебя здесь массив выделяется заранее сразу нужного размера? I>Ты же срал кирпичами без малого полгода и настаивал, что это де случайность и вообще враньё. Выходит, что это особенность виртуальной машины.
Кажется, ты уже бредить начал на почве фрустрации. Бедолага.
Здравствуйте, CoderMonkey, Вы писали: I>>Важно что твоё быстрое не может внятно обогнать моё тормозное CM>Что-то ты, родной, совсем заврался. Разница в 2-6 раз, и совсем не в пользу жабаскрипта.
"Железо у тебя, кстати, всё равно очень тормозное." Ты сам то смотришь что пишешь ? Было железо, вдруг стало джаваскрипт >И я даже оптимизировать пока не пытался.
Ты не волнуйся, за тебя уже всё сделали и результаты опубликовали почти полгода назад. Не ясно, почему ты до сих пор доказаваешь, что C# быстрее. Инерция велика или что ? CM>Вечно, родной, у тебя какая-нибудь версия не та
Откуда же мне знать, как интерпретировать твои результаты, не зная версии нода ? CM>Это была 8.10 CM>А вот 9.8:
... CM>Как видишь — как вы ребята ни крутитесь, а в музыканты не годитесь.
А что тут видеть ? У тебя сортировка от моей отличается процентов на 5-10. У тебя ~1250, у меня ~1350. I>>Запусти тогда вот эту версию: CM>
CM>Всё равно медленнее, вот ведь досадная неудача.
Теперь более-менее эквивалентный код и разница всего 1.5-2 раза. CM>Кстати, похоже на то, что у тебя здесь массив выделяется заранее сразу нужного размера?
И же какой этот "нужный размер" в коде который завязан на yield ?
function ToArray(iterator) {
return [...iterator];
}
Здравствуйте, Ikemefula, Вы писали:
I> "Железо у тебя, кстати, всё равно очень тормозное." Ты сам то смотришь что пишешь ? Было железо, вдруг стало джаваскрипт
И то, и другое. Шевели мозгами.
I>Ты не волнуйся, за тебя уже всё сделали и результаты опубликовали почти полгода назад. Не ясно, почему ты до сих пор доказаваешь, что C# быстрее. Инерция велика или что ?
Ну если у тебя внезапно 1244 у жабы быстрее чем 577 у C#, то я прямо даже не знаю, чем тебе помочь. Нейролептики не пробовал?
I>А что тут видеть ? У тебя сортировка от моей отличается процентов на 5-10. У тебя ~1250, у меня ~1350.
У тебя все результаты сортировки, кроме первого — около 1700. У меня все на одном уровне — около 1200-1300, причем и в 8 версии, и в 9.
Похоже, ты опять взялся за подтасовку результатов? Хоть бы делал это поумнее, что ли.
I>Теперь более-менее эквивалентный код и разница всего 1.5-2 раза.
Хаха, всего-навсего. Это мы еще только на примитивных тестах проверяли.
Здравствуйте, CoderMonkey, Вы писали:
I>>Ты не волнуйся, за тебя уже всё сделали и результаты опубликовали почти полгода назад. Не ясно, почему ты до сих пор доказаваешь, что C# быстрее. Инерция велика или что ?
CM>Ну если у тебя внезапно 1244 у жабы быстрее чем 577 у C#, то я прямо даже не знаю, чем тебе помочь. Нейролептики не пробовал?
Полгода назад alexzzzzz "обогнал" JS примерно в 10 раз. Чего ты пыжишься со своими 577мс совершенно не ясно. "Нейролептики не пробовал?" @
I>>А что тут видеть ? У тебя сортировка от моей отличается процентов на 5-10. У тебя ~1250, у меня ~1350.
CM>У тебя все результаты сортировки, кроме первого — около 1700.
Если открыть хотя бы один глаз, то можно увидеть ~1350мс Такую же же мульку я показывал тебе еще в декабре. Но ты не понял.
>У меня все на одном уровне — около 1200-1300, причем и в 8 версии, и в 9.
Выходит, 8я версия у тебя работает быстрее 8й версии у тебя же
Видишь, что у тебя за результаты были ? Или щас скажешь, что и там я наврал, с твоего компа не те результаты запостил
Во третьих, ты снова сравниваешь результаты на разных рантаймах Сам подумай — 3-4 месяца разницы, а по твоим же постам получается что 8я версия работает то так, то так
CM>Похоже, ты опять взялся за подтасовку результатов? Хоть бы делал это поумнее, что ли.
На этот раз я удачно подменил все твои сообщения задним числом.
I>>Теперь более-менее эквивалентный код и разница всего 1.5-2 раза.
CM>Хаха, всего-навсего. Это мы еще только на примитивных тестах проверяли.
Да успокойся, alexzzzzz показал все что надо, тебе ничего не осталось.
Все что было нужно — получить с твоего компа нужные результаты. Ты раньше все отнекивался, отхихикивался. А щас вот всю работу взял и выполнил. Молодец!
Самое смешное, ты подкрутил C# версию не в ту сторону. Думал JS зарулить в минуса, а вышло так, что разница уменьшилась. Попробуй еще раз, а я покоментирую
Здравствуйте, Ikemefula, Вы писали:
I>Полгода назад alexzzzzz "обогнал" JS примерно в 10 раз. Чего ты пыжишься со своими 577мс совершенно не ясно.
Я, собственно, и не пытался выжимать биты из байтов.
I>Выходит, 8я версия у тебя работает быстрее 8й версии у тебя же
Патчи на ось ставятся, да к тому же бывают еще и минорные обновления. Не слышал, не?
I>Все что было нужно — получить с твоего компа нужные результаты. Ты раньше все отнекивался, отхихикивался. А щас вот всю работу взял и выполнил. Молодец!
Все результаты уже были раньше.
Чувак, тебе реально нужна помощь. И еще, попробуй работать. Тогда не придется сидеть на допотопном железе.
Здравствуйте, CoderMonkey, Вы писали:
I>>Полгода назад alexzzzzz "обогнал" JS примерно в 10 раз. Чего ты пыжишься со своими 577мс совершенно не ясно.
CM>Я, собственно, и не пытался выжимать биты из байтов.
Ну как же, ты целенаправленно изменил логику генерации данных. Это ж не я выдал с твого компа код, где гуид заменен на long.
А все просто объясняется — на старом ноде это увеличивало разницу в производительности между C# и JS.
Но вот на новом — уменьшает Ты обманул сам себя. Что бы разница между C# и JS была больше, надо вернуть Гуид, как было раньше.
I>>Выходит, 8я версия у тебя работает быстрее 8й версии у тебя же
CM>Патчи на ось ставятся, да к тому же бывают еще и минорные обновления. Не слышал, не?
Речь о том, что номер версии важен, т.к. 8я 8й рознь. И всё это из твоих результатов
>Чувак, тебе реально нужна помощь. И еще, попробуй работать. Тогда не придется сидеть на допотопном железе.
Похоже, ты сильно гордишься тем, что твоё железо работает ажно треть быстрее моего допотопного
Кстати говоря, вот еще более другой тест, в нем используется другой таймер, хардварный.
'use strict';
const N = 1000*1000;
const re = /-/g;
function time(){
let start = process.hrtime();
return start[0]*1000 + 0|start[1]/1000000;
}
function Main(number) {
let watch = time();
let vals = ToArray(Select(Range(0, number), x => new TestClass()));
let compare = (x, y) =>{
if(x === y)
return 0;
if(x > y)
return 1;
return -1;
};
console.warn(`Init, miliseconds: ${time() - watch}`);
watch = time();
QuickSort(vals, (x,y)=>compare(x.Id, y.Id));
console.warn(`Sort miliseconds: ${time() - watch}`);
}
function QuickSort(vals, compare){
QuickSortImpl(vals, compare, 0, vals.length - 1);
}
function QuickSortImpl (vals, compare, left, right) {
if (right <= left)
return;
let i = left;
let j = right;
const mid = Math.floor((left + right) / 2);
const midVal = vals[mid];
while (i <= j) {
while (compare(vals[i], midVal) > 0) {
i++;
}
while (compare(vals[j], midVal) < 0) {
j--;
}
if (i <= j) {
const tmp = vals[i];
vals[i] = vals[j];
vals[j] = tmp;
i++;
j--;
}
}
if(left < i - 1) {
QuickSortImpl(vals, compare, left, i - 1);
}
if(right > i) {
QuickSortImpl(vals, compare, i, right);
}
}
class TestClass {
constructor() {
this.Id = CreateGuid();
this.Value = CreateGuid();
}
toString() {
return this.Id;
}
}
function ToArray(iterator) {
return [...iterator];
}
function* Range(start, end) {
for(let i = start; i<end; i++) {
yield i;
}
}
function* Select(iterator, projector) {
for(let x of iterator) {
yield projector(x);
}
}
function CreateGuid() {
return NewGuid().toString().replace(re, "");
}
function NewGuid() {
return ''+Math.floor(Math.random()*Math.pow(10,16));
}
function delay(time) {
return new Promise((resolve)=>{
setTimeout(resolve, time);
});
}
for(let i = 0, promise = Promise.resolve(); i<100;i++) {
promise = promise.then(()=>Main(N)).then(()=>delay(1000));
}
Здравствуйте, Ikemefula, Вы писали:
I>Ну как же, ты целенаправленно изменил логику генерации данных. Это ж не я выдал с твого компа код, где гуид заменен на long. I>А все просто объясняется — на старом ноде это увеличивало разницу в производительности между C# и JS. I>Но вот на новом — уменьшает Ты обманул сам себя. Что бы разница между C# и JS была больше, надо вернуть Гуид, как было раньше.
На самом деле, я просто уже не помню, что и зачем менял. Давно это было, да и пофиг — JS все равно посасывает
I>Похоже, ты сильно гордишься тем, что твоё железо работает ажно треть быстрее моего допотопного
Ты же только что писал, что купил новое?
Треть, кстати, в нынешние времена "пяти процентов прироста в год, причем не каждый" — это дофига.
I>Кстати говоря, вот еще более другой тест, в нем используется другой таймер, хардварный.
Здравствуйте, CoderMonkey, Вы писали:
CM>Ты же только что писал, что купил новое?
А я не говорил, что купил.
CM>Треть, кстати, в нынешние времена "пяти процентов прироста в год, причем не каждый" — это дофига.
Не дофига. Узкое место нынче не проц а SSD и количество памяти.
I>>Кстати говоря, вот еще более другой тест, в нем используется другой таймер, хардварный.
CM>И?
Ну вот запусти, посмотрим на результаты. У меня сортировка колеблется от 900 до 2000. Но это на девятом ноде. На восьмом немного иначе.
Здравствуйте, Ikemefula, Вы писали:
I>Не дофига. Узкое место нынче не проц а SSD и количество памяти.
Количество памяти как раз давно не узкое место. У меня 32 и хватает на всё. Думал поставить 64, но потом решил — а нафига?
В любом случае, узкое место жабаскрипта — это как раз процессор.
I>Ну вот запусти, посмотрим на результаты. У меня сортировка колеблется от 900 до 2000. Но это на девятом ноде. На восьмом немного иначе.
Здравствуйте, CoderMonkey, Вы писали:
CM>Количество памяти как раз давно не узкое место. У меня 32 и хватает на всё. Думал поставить 64, но потом решил — а нафига?
Поставь 8 и сразу узнаешь, что память таки узкое место. 8гб это типичный объем на новых компах.
CM>В любом случае, узкое место жабаскрипта — это как раз процессор.
Где логика? У тебя и у меня сорттровка показывает почти одно и то же, а разница в процах реально в треть или даже в полтора раза.
I>>Ну вот запусти, посмотрим на результаты. У меня сортировка колеблется от 900 до 2000. Но это на девятом ноде. На восьмом немного иначе.
CM>Ага, разброс увеличился. И?
Если проблема с таймером, то старые замеры никуда не годятся. Собственно, я не знаю чего ожидать. Если картина та же, то узкое место вовсе не проц. Иначе разница должна коррелировать с разницей в процах.
Здравствуйте, Ikemefula, Вы писали:
I> Поставь 8 и сразу узнаешь, что память таки узкое место. 8гб это типичный объем на новых компах.
Ну на старом ноуте у меня 8. Особых проблем не замечал
А вообще, это проблема в жлобстве, а не в памяти.
I>Где логика? У тебя и у меня сорттровка показывает почти одно и то же, а разница в процах реально в треть или даже в полтора раза.
Логика в том, что JS не умеет нормально использовать процессор, вот и всё.
I>Если проблема с таймером, то старые замеры никуда не годятся. Собственно, я не знаю чего ожидать. Если картина та же, то узкое место вовсе не проц. Иначе разница должна коррелировать с разницей в процах.
Здравствуйте, CoderMonkey, Вы писали:
CM>Ну на старом ноуте у меня 8. Особых проблем не замечал CM>А вообще, это проблема в жлобстве, а не в памяти.
А ты запускаешь на старом ноуте все, что и на новом компе?
I>>Где логика? У тебя и у меня сорттровка показывает почти одно и то же, а разница в процах реально в треть или даже в полтора раза.
CM>Логика в том, что JS не умеет нормально использовать процессор, вот и всё.
Это смотря в каких задачах. В числодробилках — нет, не умеет. Но вот в тестах techempower весь дотнет идет или сравнимо с нодом или хуже. Иногда — значительно хуже.
Здравствуйте, Ikemefula, Вы писали:
I>А ты запускаешь на старом ноуте все, что и на новом компе?
Виртуалки не запускаю. А так, всё то же самое.
I>Но вот в тестах techempower весь дотнет идет или сравнимо с нодом или хуже. Иногда — значительно хуже.
Здравствуйте, Ikemefula, Вы писали:
I>Так запусти. Если память не узкое место, вытянет и виртуалки, и все остальное вместе взятое без каких либо проблем I>Раз все так круто на 8ми, зачем тебе 32, если память не узкое место ?
Мы кажется говорили про JS, а не виртуалки? Или у тебя опять проблемы с концентрацией внимания?
Здравствуйте, CoderMonkey, Вы писали:
CM>Здравствуйте, Ikemefula, Вы писали:
I>>Так запусти. Если память не узкое место, вытянет и виртуалки, и все остальное вместе взятое без каких либо проблем I>>Раз все так круто на 8ми, зачем тебе 32, если память не узкое место ?
CM>Мы кажется говорили про JS, а не виртуалки? Или у тебя опять проблемы с концентрацией внимания?
"Виртуалки не запускаю." @ CoderMonkey. Похоже, не только с вниманием, но и с памятью проблемы.