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

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

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

23 ответов

19 просмотров

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

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 в БД отправлять найденное решение

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
Карта сайта