Для Гуру - генерация рандомных символов

stalker0007

Client
Регистрация
14.09.2016
Сообщения
72
Благодарностей
0
Баллы
6
Собственно вопрос:

- создаю кубик генерации 30 символов -- результат добавляю в переменную -- сохраняю в файл
при таком раскладе многопоток очень серьезно между собой конфликтует ибо открывает много раз 1 и тот же документ ( в итоге много ошибок) не вариант


- создаю кубик генерации 30 символов -- результат добавляю в список--делаю повтор 100 000 раз---- сохраняю в файл с рандомным названием
такой вариант идеален нет конфликтов с файлами и нет ошибок - при таком варианте за 1 минуту на 15 потоках я делаю 8 лямов строк на 71 файл = 203 мб
----------------------------------------
- При этом не используется браузер!
- мой процессор Intel core i7-8086k 4GHz и 32 оперативки
- на 15 потоках процессор грузится на 70-80% что не дает бляха сделать больше потоков


Теперь вопрос можно ли сделать генерацию еще быстрее? нужны десятки гигов рандомых 30 символов где первый символ всегда 'S'

(Если с зенкой шустрее не выйдет может есть варианты на с+ питоне...
знаю о сrunch и о hashcat очень шустрые за 2-5 мин 10 гигов запросто но там идет по порядку а это 1000чи терабайтов не вариант! нужен рандом!)


на выходе:

SszRiekAs9VY8Udht6caVtbtU3rjeX
SukWkN5KE9RzMFLhuoubQyKBCApZ48
SnLWtNMjpdJGbAUKz3ja9MkYUnfakX
SozMzv4j85E2vPEbiUh5Bh2v3VrtUk
SkUBhJGehuUwJAtx2AT6oFYu5t2qSg
SsbdVLFR9wJrgMUXWhrUpvgLhuBQjc
S4vzxweV3KAyAKwACNTATCFDdu5y3J
...
 
Последнее редактирование:

Чешир

Client
Регистрация
27.06.2014
Сообщения
1 526
Благодарностей
892
Баллы
113
Ну хрен знает. Попробуй их макросом сразу кучей генерить, как у меня в файле... значение типа присваивать. Может, быстрее будет.
Хотя не понимаю нахрена тебе столько рандомов.... когда ты их прочесть успеешь?))))
 

Вложения

  • Спасибо
Реакции: stalker0007

doc

Client
Регистрация
30.03.2012
Сообщения
8 605
Благодарностей
4 596
Баллы
113
Теперь вопрос можно ли сделать генерацию еще быстрее? нужны десятки гигов рандомых 30 символов где первый символ всегда 'S'
может быть да, может быть нет. Вряд ли кто-то узнает, пока не напишет реализацию. Скорее да, чем нет
 

Чешир

Client
Регистрация
27.06.2014
Сообщения
1 526
Благодарностей
892
Баллы
113
Вряд ли кто-то узнает, пока не напишет реализацию.
Это точно, коллега, полностью согласен! Но главное не отчаиваться. Человечество на Луну тоже долго не могло прилететь. Но потом оно же напряглось и слетало... причем так слетало, что теперь никто не знает слетало оно или нет. Потому что всё в этом мире относительно.
 
  • Спасибо
Реакции: stalker0007

doc

Client
Регистрация
30.03.2012
Сообщения
8 605
Благодарностей
4 596
Баллы
113
Это точно, коллега, полностью согласен! Но главное не отчаиваться. Человечество на Луну тоже долго не могло прилететь. Но потом оно же напряглось и слетало... причем так слетало, что теперь никто не знает слетало оно или нет. Потому что всё в этом мире относительно.
это я к тому, что человек вроде как задает вопрос, ответ на который должен быть да или нет.
Но чтобы, например, мне дать этот ответ, мне нужно:
1. Придумать алгоритм, который по-моему мнению будет быстрее реализации тс
2. Реализовать алгоритм
3. Протестировать

Я к тому, что это один из тех хитрых вопросов, где ты вроде как ничего и не просишь тебе делать, но ответить без реализации проблематично
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
10 млн строк за 12 сек на обычном ноутбуке устроит?

Код:
char[] symbolss = "ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789".ToCharArray();
            ThreadLocal<Random> rnd = new ThreadLocal<Random>(() => new Random(Guid.NewGuid().GetHashCode()));
            ConcurrentQueue<string> queRnd = new ConcurrentQueue<string>();
            Parallel.For(0, 10000000, (i) =>
            {
                StringBuilder sb = new StringBuilder(50);
                sb.Append('S');
                for (int j = 0; j < 29;j++)
                {
                    sb.Append(symbolss[rnd.Value.Next(0, 62)]);
                }
                queRnd.Enqueue(sb.ToString());
            });
 
Последнее редактирование:

Чешир

Client
Регистрация
27.06.2014
Сообщения
1 526
Благодарностей
892
Баллы
113

SergSh

Client
Регистрация
10.05.2017
Сообщения
541
Благодарностей
395
Баллы
63
на 4 ядрах 8 оперативки через мейкер 58 сек 8 файлов по 10000000 строк
код кривой, что-то с сохранением))
Код:
 project.SendInfoToLog("start");

List<string> buf = new List<string>();
string str = "SAEIOUYBCDFGHJKLMNPQRTVWXZaeiouybcdfghjklmnpqrstvwxz1234567890";
char[] chars = str.ToCharArray();

StringBuilder sb = new StringBuilder();
var rnd = new Random();

for(int a = 0; a < 8; a++)
{
    for(int b = 0; b < 10000000; b++)
    {
        for(int c = 0; c < 30; c++)
        {
            if(c == 0)
                sb.Append(chars[0]);
            else
                sb.Append(chars[rnd.Next(0,62)]);
        }
        buf.Add(sb.ToString());
        sb.Clear();
    }
   
    int unixTime = (int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
   
    string path = project.Directory + @"\\DATA\\" + unixTime.ToString() + @".txt";
   
    FileInfo fileres = new FileInfo (path);
    System.IO.File.WriteAllLines(path, buf);
   
    buf.Clear();
}

project.SendInfoToLog("STOP");
 
  • Спасибо
Реакции: Чешир

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
Любой правильный unsafe код по генерации рандома в разы обойдет наши стандартные решения
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 856
Баллы
113
Любой правильный unsafe код по генерации рандома в разы обойдет наши стандартные решения
Главное всё равно не перемудрить и не получить генерацию одинаковых значений в один временной период.
Мне как раз друг недавно показывал простецкий пример на кубиках, который генерил одно и тоже :-) А до этого я как раз разбирался с различными ГПСЧ, выкладывал тут на форуме где-то даже топик с графиками.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)