LINUX.ORG.RU

История изменений

Исправление lbvf50txt, (текущая версия) :

общаемся с удалённой системой к которой пинг 50мсек, и что нам лишняя 1мсек от питона.

urls = []
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0040.shtml")
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0050.shtml")
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0060.shtml")
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0070.shtml")

Это общие рассуждения. Вот конкретная задача скачать «Войну и Мир» Толстого и перевести ее в текстовый формат с длинной строки в 70 символов. Сделать однопоточно на Ruby.

Команда запускается так ./upload_and_stdout.rb > all.txt

Что имеем по скорости?

Ruby:
# Download 2121.023 ms
# Convert to UTF-8 103.808 ms
# Remove \r 60.152 ms
# Strip HTML 331.474 ms
# Remove `-` 102.34 ms
# Make 70 symbols 920.447 ms
# To STDOUT 6.182 ms

Переведенный LLM код на Go:
Download 1222.453 ms
Convert to UTF-8 0.000 ms
Remove \r 4.915 ms
Strip HTML 195.624 ms
Remove `-` 588.275 ms
Make 70 symbols 532.536 ms
To STDOUT 32.242 ms

Длинней STDOUT потому что LLM версия не правильно режет строки.
Строки короче в 2 раза. Но суть та-же.

На обработку 90k строк общим весом 6Mb. При этом я «не в чем себе не отказывал», и склеивал колол строки так:

def line_to_70(line)
  l = line.split(" ")
  arr = []
  max = 70
  i = 0
  while i < l.size 
    if arr.empty?
      arr.push ""
    end
    if (arr[-1].size + l[i].size) < max
      arr[-1] += l[i] + " "
    else
      arr.push ""
      arr[-1] += l[i] + " "
    end
    i += 1
  end
  arr.reject{|x| x.empty?}
end
run
texts.map!{|text| 
  text
    .split("\n")
    .map{|l| l.empty? ? "" : line_to_70(l).join("\n")}
    .join("\n\n").gsub(/\n{4,}/,"\n\n") 
}
stop("Make 70 symbols")

И на это у меня ушла 1 секунда. Т.е. по это еще «терпимо» по классификации оценки работы. А все остальные операции уходят в «вполне себе хорошо». Код на Go только в 2 раза быстрей.

Есть таблица от Jakob Nielsen, где наглядно показывается как пользователь реагирует на задержки.

Время задержкиВосприятие пользователемРеакция/ощущение
0–100 мс⚡ Мгновенно (blazingly fast)Чувствуется как локальная реакция
100–300 мс🤔 Машина «думает» (machine thinking)Замечается микрозадержка
300–1000 мс (1 сек)⏱ Заметная паузаТерпимо, но внимание сбивается
1–3 сек💤 Медленно (slow)Пользователь отвлекается
3–10 сек😡 Очень медленно (very slow)Раздражение, риск закрыть сайт
>10 сек🚪 Уход (abandon)Пользователь уходит, если нет прогресса

Исправление lbvf50txt, :

общаемся с удалённой системой к которой пинг 50мсек, и что нам лишняя 1мсек от питона.

urls = []
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0040.shtml")
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0050.shtml")
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0060.shtml")
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0070.shtml")

Это общие рассуждения. Вот конкретная задача скачать «Войну и Мир» Толстого и перевести ее в текстовый формат с длинной строки в 70 символов. Сделать на Ruby.

Команда запускается так ./upload_and_stdout.rb > all.txt

Что имеем по скорости?

Ruby:
# Download 2121.023 ms
# Convert to UTF-8 103.808 ms
# Remove \r 60.152 ms
# Strip HTML 331.474 ms
# Remove `-` 102.34 ms
# Make 70 symbols 920.447 ms
# To STDOUT 6.182 ms

Переведенный LLM код на Go:
Download 1222.453 ms
Convert to UTF-8 0.000 ms
Remove \r 4.915 ms
Strip HTML 195.624 ms
Remove `-` 588.275 ms
Make 70 symbols 532.536 ms
To STDOUT 32.242 ms

Длинней STDOUT потому что LLM версия не правильно режет строки.
Строки короче в 2 раза. Но суть та-же.

На обработку 90k строк общим весом 6Mb. При этом я «не в чем себе не отказывал», и склеивал колол строки так:

def line_to_70(line)
  l = line.split(" ")
  arr = []
  max = 70
  i = 0
  while i < l.size 
    if arr.empty?
      arr.push ""
    end
    if (arr[-1].size + l[i].size) < max
      arr[-1] += l[i] + " "
    else
      arr.push ""
      arr[-1] += l[i] + " "
    end
    i += 1
  end
  arr.reject{|x| x.empty?}
end
run
texts.map!{|text| 
  text
    .split("\n")
    .map{|l| l.empty? ? "" : line_to_70(l).join("\n")}
    .join("\n\n").gsub(/\n{4,}/,"\n\n") 
}
stop("Make 70 symbols")

И на это у меня ушла 1 секунда. Т.е. по это еще «терпимо» по классификации оценки работы. А все остальные операции уходят в «вполне себе хорошо». Код на Go только в 2 раза быстрей.

Есть таблица от Jakob Nielsen, где наглядно показывается как пользователь реагирует на задержки.

Время задержкиВосприятие пользователемРеакция/ощущение
0–100 мс⚡ Мгновенно (blazingly fast)Чувствуется как локальная реакция
100–300 мс🤔 Машина «думает» (machine thinking)Замечается микрозадержка
300–1000 мс (1 сек)⏱ Заметная паузаТерпимо, но внимание сбивается
1–3 сек💤 Медленно (slow)Пользователь отвлекается
3–10 сек😡 Очень медленно (very slow)Раздражение, риск закрыть сайт
>10 сек🚪 Уход (abandon)Пользователь уходит, если нет прогресса

Исправление lbvf50txt, :

общаемся с удалённой системой к которой пинг 50мсек, и что нам лишняя 1мсек от питона.

urls = []
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0040.shtml")
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0050.shtml")
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0060.shtml")
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0070.shtml")

Это общие рассуждения. Вот конкретная задача скачать «Войну и Мир» Толстого и перевести ее в текстовый формат с длинной строки в 70 символов. Сделать на Ruby.

Команда запускается так ./upload_and_stdout.rb > all.txt

Что имеем по скорости?

Ruby:
# Download 2121.023 ms
# Convert to UTF-8 103.808 ms
# Remove \r 60.152 ms
# Strip HTML 331.474 ms
# Remove `-` 102.34 ms
# Make 70 symbols 920.447 ms
# To STDOUT 6.182 ms

Переведенный LLM код на Go:
Download 1222.453 ms
Convert to UTF-8 0.000 ms
Remove \r 4.915 ms
Strip HTML 195.624 ms
Remove `-` 588.275 ms
Make 70 symbols 532.536 ms
To STDOUT 32.242 ms

Длинней STDOUT потому что LLM версия не правильно режет строки.
Но суть та-же.

На обработку 90k строк общим весом 6Mb. При этом я «не в чем себе не отказывал», и склеивал колол строки так:

def line_to_70(line)
  l = line.split(" ")
  arr = []
  max = 70
  i = 0
  while i < l.size 
    if arr.empty?
      arr.push ""
    end
    if (arr[-1].size + l[i].size) < max
      arr[-1] += l[i] + " "
    else
      arr.push ""
      arr[-1] += l[i] + " "
    end
    i += 1
  end
  arr.reject{|x| x.empty?}
end
run
texts.map!{|text| 
  text
    .split("\n")
    .map{|l| l.empty? ? "" : line_to_70(l).join("\n")}
    .join("\n\n").gsub(/\n{4,}/,"\n\n") 
}
stop("Make 70 symbols")

И на это у меня ушла 1 секунда. Т.е. по это еще «терпимо» по классификации оценки работы. А все остальные операции уходят в «вполне себе хорошо». Код на Go только в 2 раза быстрей.

Есть таблица от Jakob Nielsen, где наглядно показывается как пользователь реагирует на задержки.

Время задержкиВосприятие пользователемРеакция/ощущение
0–100 мс⚡ Мгновенно (blazingly fast)Чувствуется как локальная реакция
100–300 мс🤔 Машина «думает» (machine thinking)Замечается микрозадержка
300–1000 мс (1 сек)⏱ Заметная паузаТерпимо, но внимание сбивается
1–3 сек💤 Медленно (slow)Пользователь отвлекается
3–10 сек😡 Очень медленно (very slow)Раздражение, риск закрыть сайт
>10 сек🚪 Уход (abandon)Пользователь уходит, если нет прогресса

Исходная версия lbvf50txt, :

общаемся с удалённой системой к которой пинг 50мсек, и что нам лишняя 1мсек от питона.

urls = []
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0040.shtml")
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0050.shtml")
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0060.shtml")
urls.push("http://az.lib.ru/t/tolstoj_lew_nikolaewich/text_0070.shtml")

Это общие рассуждения. Вот конкретная задача скачать «Войну и Мир» Толстого и перевести ее в текстовый формат с длинной строки в 70 символов. Сделать на Ruby.

Команда запускается так ./upload_and_stdout.rb > all.txt

Что имеем по скорости?

# Download 2121.023 ms
# Convert to UTF-8 103.808 ms
# Remove \r 60.152 ms
# Strip HTML 331.474 ms
# Remove `-` 102.34 ms
# Make 70 symbols 920.447 ms
# To STDOUT 6.182 ms

На обработку 90k строк общим весом 6Mb. При этом я «не в чем себе не отказывал», и склеивал колол строки так:

def line_to_70(line)
  l = line.split(" ")
  arr = []
  max = 70
  i = 0
  while i < l.size 
    if arr.empty?
      arr.push ""
    end
    if (arr[-1].size + l[i].size) < max
      arr[-1] += l[i] + " "
    else
      arr.push ""
      arr[-1] += l[i] + " "
    end
    i += 1
  end
  arr.reject{|x| x.empty?}
end
run
texts.map!{|text| 
  text
    .split("\n")
    .map{|l| l.empty? ? "" : line_to_70(l).join("\n")}
    .join("\n\n").gsub(/\n{4,}/,"\n\n") 
}
stop("Make 70 symbols")

И на это у меня ушла 1 секунда. Т.е. по это еще «терпимо» по классификации оценки работы. А все остальные операции уходят в «вполне себе хорошо».

Есть таблица от Jakob Nielsen, где наглядно показывается как пользователь реагирует на задержки.

Время задержкиВосприятие пользователемРеакция/ощущение
0–100 мс⚡ Мгновенно (blazingly fast)Чувствуется как локальная реакция
100–300 мс🤔 Машина «думает» (machine thinking)Замечается микрозадержка
300–1000 мс (1 сек)⏱ Заметная паузаТерпимо, но внимание сбивается
1–3 сек💤 Медленно (slow)Пользователь отвлекается
3–10 сек😡 Очень медленно (very slow)Раздражение, риск закрыть сайт
>10 сек🚪 Уход (abandon)Пользователь уходит, если нет прогресса