Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2019, 20:47   #1
Pcrepair
Форумчанин
 
Регистрация: 04.01.2011
Сообщений: 260
По умолчанию Многопоточность и загрузка 8-и ядерного процессора

Добрый день. Есть следующая ситуация:
1. Комп(i7 8 вирт. ядер; 8гб ОЗУ; ВЫНь7 х64; SSD для хранения данных; ХЕ10.2.3)
2. программа для обработки текстовых файлов в многопоточном режиме (настройка от 2 до 100 потоков)
- вызывается поток
- потоку передается путь к файлу
- поток считывает файл, изучает содержимое(есть несколько циклов ДЛЯ с большим числом итераций)
- поток принимает решение и копирует файл в другие каталоги

Результаты:
- сколько не выставляй количество потоков, все рано загрузка процессора 11-13% (всегда только 4-е ядра загружены на 25%) - это все по манагеру задач конечно
- пропорциональный рост потребляемой памяти, тут все понятно

Вопрос: как всетаки загрузить проц на все 200% ?
видимо есть какие то варианты?
или какието встроенные ограничения?

Всем ответившим по делу заранее спасибо.
Pcrepair вне форума Ответить с цитированием
Старый 31.07.2019, 21:23   #2
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Вам на исходниках написали. Ваша задача упирается в менеджер памяти который однопоточный. А вы на каждой строчке перевыделяете память.

Хотите разгрузить делайте не потоки, а процессы. Это самый простой спосо6.
Либо переписывать менеджер памяти. Второе по простате это разбить все адресное пространство на не пересекающиеся части и отдать их потокам. Соответственно в таком варианте рекомендуется урезать число потоков.
Для увеличения памяти использовать механизмы из менеджера памяти OS/360.

Более сложный вариант для блоков среднего размера.
Каждому блоку в менеджере памяти присвоить доп поле номер потока-владельца блока. Причем поле должно быть как у занятых блоков так и у свободных.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 01.08.2019, 10:13   #3
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
Второе по простате
простата
BLACK_RAIN вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка процессора. Артём_2 Общие вопросы Delphi 2 13.03.2014 10:59
Неполная загрузка 4-ядерного процессора, Canopus Procoder3. GRG2 Софт 5 01.06.2011 18:49
загрузка процессора koval911 Операционные системы общие вопросы 10 14.12.2010 17:15
Загрузка процессора Syred Общие вопросы Delphi 1 12.06.2008 22:15
Загрузка процессора Terran Общие вопросы Delphi 1 15.12.2007 22:27