![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| elestrago |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 146 Регистрация: 23.8.2007 Где: runet Репутация: 1 Всего: 3 |
в общем ситуация такая передаю файлы через сеть при момощи отдельного потока!
для создания потока использую класс TThread данные передаются в цике до тех пор пока позция FileStream не дойдет до конца файла! при этом нагрузка на цп сразу взлетает до 50% вот как примерно все это выглядет
Впринцепе выход из этой ситуации прилепить в этом цикле sleep(1) но это дико снижает скорость передачи данных, посоветуйте как грамотно снизить нагрузку на цп заранее спасибо --------------------
|
|||
|
||||
| Matematik |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1027 Регистрация: 11.3.2006 Репутация: 17 Всего: 50 |
Какой размер буфера?
|
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
а что за проц? может просто он слабый или памяти мало?
|
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Как вариант, можно уменшить приоритет потока, но это так же может сказаться на скорости передачи.
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| elestrago |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 146 Регистрация: 23.8.2007 Где: runet Репутация: 1 Всего: 3 |
Buffer: array[0..10240] of char;
а насчет проца он не слабый 3,2 пентиум Добавлено через 2 минуты и 1 секунду приоритет потока не как не влияет, проц загружается так же как и раньше я пробовал! --------------------
|
|||
|
||||
| Coder |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: 5 Всего: 11 |
elestrago, а размер файла какой? попробуй прогнать программу с заглушкой send(). да и буффер нужно уменьшить все равно при передаче в один пакет он не влезет.
|
|||
|
||||
| AntonN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: 3 Всего: 18 |
в тело цикла воткни sleep(1) или так и будет нагружать
Это сообщение отредактировал(а) AntonN - 27.10.2008, 15:41 |
|||
|
||||
| Sajtran |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 15.10.2008 Где: Мегион Репутация: 2 Всего: 2 |
по пробуй по играть с буферами кратными 2^9=512 байт
|
|||
|
||||
| elestrago |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 146 Регистрация: 23.8.2007 Где: runet Репутация: 1 Всего: 3 |
Все проблему решил, засчет того что увеличил буфер и воткнул в цикл sleep
всем спасибо --------------------
|
|||
|
||||
| Virtuals |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 476 Регистрация: 27.11.2006 Репутация: 3 Всего: 11 |
elestrago, а sleep то зачем?
ЗЫ приведи код полнее непонятно что у тебя за сокеты |
|||
|
||||
| elestrago |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 146 Регистрация: 23.8.2007 Где: runet Репутация: 1 Всего: 3 |
работаю с блокирующими сокетами, а вот насчет событий я не уверен что мне было бы удобнее! Зы ты думаеш если передавать данные в неблокирующем режиме то нагрузка спадет чтоли? --------------------
|
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Ты не знаешь что означает Sleep в потоке? Sleep сообщает ОС что текущий поток не нужнается в дополнительных циклах процессора в течении определенного количества миллесекунд. При передаче в качестве параметра в Sleep значения, равного 0 (или 1, как в данном случае), ОС передает процессорные циклы одному из ожидающих потоков равного или высшего приоритета. Таким образом удается избежать ситуации, когда один поток захватывает все процессорное время.
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| Virtuals |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 476 Регистрация: 27.11.2006 Репутация: 3 Всего: 11 |
Poseidon, я отлично знаю что такое sleep, так что умничать сдесь не очень к месту,
я нифига не понял зачем это тут!. elestrago,
100% в блокирующем режиме ты понятия не имееш сколько понадобится времени на передачу твоих данных и у тебя осталось 2 варианта 1. сидеть в глухом цикле, и занять все свободное процессорное время на себя (при этом нагрузка на цп сразу взлетает до 50%) как я понял у тя проц двухьядерный 2. сунуть этот sleep и подождать какое-то время, совершенно ничего не делая отсюда в вариантах 1. скорость передачи будет почти макс, но ... недостатки ты и сам знаеш 2. скорость напрямую зависит от того как ты удачно угадал время (дабы в sleep сунуть) затраченное на передачу твоего блока данных и на промежуточные расходы, типа файловых операций и т.д. а вот в неблокирующем режиме 1.ты отдаеш данные на передачу 2. пока они передаются, читаеш новый блок данных, и спокойно ждеш (в обработчике событий, и никаких sleep) события что можно сунуть новый блок. +ы процессорное время занимается ровно столько сколько нужно, и никаких левых задержек, ланные передаются с той скоростью, сколько может сжевать сетевой интерфейс |
|||
|
||||
| elestrago |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 146 Регистрация: 23.8.2007 Где: runet Репутация: 1 Всего: 3 |
хм интересно
Спасибо всем за ответы!! теперь тема точно закрыта --------------------
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |