169 похожих чатов

А почему просто не раздать потокам разные списки на вычисление,

без пересечений? Чтобы не надо было синхронизировать

23 ответов

23 просмотра

А почему бы и нет, но задача ОСВОЕНИЕ МЕЖПОТОКОВЫХ ВЗАИМОДЕЙСТВИЙ

Peter- Автор вопроса
DELPHI SOLUTIONS
А почему бы и нет, но задача ОСВОЕНИЕ МЕЖПОТОКОВЫХ...

Ну дык одной из фишек в этом является правильно на потоки дробить, а не абы как

Peter
Ну дык одной из фишек в этом является правильно на...

Я оно не как бы как ... все работает отлично... удаление из списка у каждого потока - это задача редкая, и код не особо сложный

А то что если в списке 5 элементов, а ядер 32 то 32-5 = 27 - тупо будут стоять

Peter- Автор вопроса
DELPHI SOLUTIONS
А то что если в списке 5 элементов, а ядер 32 то...

Ну в противном случае несколько ядер будут делать одно и тоже, что не даст вообще ничего, кроме того, что процессор нагреется, начнет тротлить, от чего скорость упадет только. Я к тому что «забивать ядра» и делать супер сложную многопоточность ради многопоточности нет смысла, можно напротив потерять на синхронизации и словить глюков.

Peter
Ну в противном случае несколько ядер будут делать ...

Слишком сложные переживания даже сложнее чем написанный код 👍😁

Peter
Ну в противном случае несколько ядер будут делать ...

Если думать об том что процессор нагреется и будет тротлить зачем его вообще включать? 👍

DELPHI SOLUTIONS
А то что если в списке 5 элементов, а ядер 32 то...

Так ты раздавай потокам-рабочим диапазон паролей для перебора и хеш для проверки. И задачи давай небольшие ... Выполнил поток задачу и говорит основному потоку - совпадения нет, давай следующий кусочек списка паролей. И сколько бы ты ни выделил потоков на задачу в пул рабочих - все будут равномерно загружены при любом количестве искомых хешей. Если потоки будут выполнять задание за несколько сек у тебя никаких потерь на синхронизации не будет

Михаил Усков
Так ты раздавай потокам-рабочим диапазон паролей д...

так так и делается всегда... задание разбивается на "шары" т.е. доли и каждая доля "скармлевается" каждому потоку

DELPHI SOLUTIONS
screenshot так так и делается всегда... задание разбивается н...

Ну и как в такой схеме на производительность влияет способ реализации списка паролей?

Михаил Усков
Ну и как в такой схеме на производительность влияе...

каждый поток обрабатывает свою долю ко всему списку а не к части списка и если один поток нашел решение для одного элемента, то значит всем остальным потокам уже не нужно искать решение к этому элементу списка

DELPHI SOLUTIONS
каждый поток обрабатывает свою долю ко всему списк...

Если тебе так важно остановить остальные потоки если один нашел коллизию - взводи событие.

DELPHI SOLUTIONS
каждый поток обрабатывает свою долю ко всему списк...

так диапазоны ведь не пересекаются по исходным данным у потоков 🤷‍♂️ а коллизии для CRC16 искать - тоже просто создав массив 65536 boolean-ов

notme
TDictionary и TList - есть разница?

Конечно есть... у ТList доступ к элементу по индексу Tlist[index] а у TDictionary??? какой дуступ к элементу списка? через метод TDictionary.Items[key] function TList<T>.GetItem(Index: Integer): T; begin // CheckItemRange(Index) is expanded here manually to improve codegen if Cardinal(Index) >= Cardinal(FCount) then ErrorArgumentOutOfRange; Result := List[Index]; end;

DELPHI SOLUTIONS
Конечно есть... у ТList доступ к элементу по инде...

Что-то не то у вас property Items[const Key: K]: V read GetItem write SetItem; default; function TDictionary<K,V>.GetItem(const Key: K): V; var index: Integer; begin index := GetBucketIndex(Key, Hash(Key)); if index < 0 then raise EListError.CreateRes(@SGenericItemNotFound); Result := FItems[index].Value; end; тут не просто вызов функции - а ещё и хэширование ключа TDictionary - это хэш-таблица, а не просто массив

notme
так диапазоны ведь не пересекаются по исходным дан...

CRC16 - Это совсем другое ... это был просто тест использования TParallel.for

notme
Что-то не то у вас property Items[const Key: K]: V...

Да не там посмотрел ... перешел по правильным ссылкам и там так .... Ну та это же еще сложнее и медленнне работает чем просто TList[index] - больше накладных расходов на один цикл

Михаил Усков
Если тебе так важно остановить остальные потоки ес...

А почему бы остальным потокам не отправить сообщение?

DELPHI SOLUTIONS
screenshot Да не там посмотрел ... перешел по правильным сс...

THashRec = record index: integer; hash: TBytes; end; TList<THashRec> Не понимаю только как вы эту структуру используете? У вас есть поиск по THashREc.index внутри TList? Если да, то каков размер TList?

notme
THashRec = record index: integer; hash: TBytes...

Нету поиска он и не нужен.. структура связывает индекс из БД и хэша что бы знать на какую запись и с каким ID в БД отправлять найденное решение

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта