![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Многопоточность в CGI [D7, WinXP]
phantom © (2007-12-13 11:28:00)Подскажите в чем разница между программированием нескольких потоков в CGI и в формах. Я написал код в форме в котором несколько потоков обращаются к объектам TTable и это все работает, но когда я этот код переношу в CGI. Поток при попытке обратится к TTable получает ошибку что объекта по данному адресу нет. Заранее спасибо.
Palladin (2007-12-13 19:49:00) [1]
> Anatoly Podgoretsky © (13.12.07 18:51) [23]
так понятно... я как раз случаи с множественным ожиданием и имею ввиду... с единственным-то понятно... порождение потоков довольно глупо... если конечно это "единственное" невозможно парралелизировать в случае многопроцессорной системы... нюансов много...
Anatoly Podgoretsky (2007-12-13 18:51:00) [2]> Anatoly Podgoretsky (13.12.2007 18:35:22) [22]
Добавление - при условии, что есть более одного длительного запроса. При одном длительном запросе нужды в потоке нет, само CGI приложение или расширение и так в отдельном потоке.
Anatoly Podgoretsky (2007-12-13 18:35:00) [3]> Palladin (13.12.2007 17:10:21) [21]
Конечно не только базы, а любые долговременные запросы и вычисления. К самому CGI и необходимости ему потоков отношения не имеет.
Palladin (2007-12-13 17:10:00) [4]
> Anatoly Podgoretsky © (13.12.07 16:52) [20]
что ждать?
заявление было обобщенное, потокам в CGI не место... отвечено было:место и очень часто...
главный поток исполнения CGI отвечающий за свод информации из нескольких источников, запускает запросы именно в потоках... сколько запросов столько и потоков... нельзя было предсказать время отклика разных БД на разные запросы...
да и дело не только в базах, на них внимание заострять не стоит. например см. [18]
не мне тебе рассказывать значимость и место применения многопоточности, конечно иногда в CGI она не нужна, но все делается к месту и по ситуации... и разговоры о бессмысленности многопоточности в CGI эээ... ладно... не буду говорить чем они попахивают :)
Anatoly Podgoretsky (2007-12-13 16:52:00) [5]
> Palladin © (13.12.07 16:09) [17]
Подожди, ты про базы, тогда обращения должны делаться в отдельном потоке и синхронизация.
Palladin (2007-12-13 16:43:00) [6]
> phantom © (13.12.07 16:35) [18]
что ж ты молчал про 4хэ-процессорность... :) никто бы не выступал что про многопоточность CGI :)
phantom (2007-12-13 16:35:00) [7]Доступ как ни странно не монопольный, индекс создается в памяти для каждой CGI свой. четырех процессорный сервер с RAID справляется с поставленой задачей. Процесс действительно быстрее (смотел по загрузке).
Сначала тоже хотел крутить фоновый сервис на сервере чтоб все строил зарание , Это новерно в даной ситуации самый лучьший вариант.
Palladin (2007-12-13 16:09:00) [8]
> Anatoly Podgoretsky © (13.12.07 15:54) [16]
причем тут инструмент? смысл есть. привожу пример. разрабатывали мы КИС для администрации МО МС. баз туева хуча, всяких разных, информацию местами собирать нужно из нескольких, у многих отделов разное ПО, где то на клиппере, где то на оракле, где то в DBF, где то вообще... экзотические решения ( "парус" или "флиппер" например :) )... и тд... время отклика тоже разное... бо сам понимаешь... откуда у администрации деньги на высокропроизводительные машины... соответственно самое оптимальное решение данные брать по потокам...
Anatoly Podgoretsky (2007-12-13 15:54:00) [9]> Palladin (13.12.2007 15:52:15) [15]
Смысла нет, если только инструмент не умеет работать ассинхронно.
Palladin (2007-12-13 15:52:00) [10]
> нет смысла CGI и проч. WEB-приложения громоздить многопоточынми
смысл-то как раз есть, но не в данном случае
KSergey (2007-12-13 15:47:00) [11]нет смысла CGI и проч. WEB-приложения громоздить многопоточынми и вот почему: WEB-сервер по определению обрабатывает много одновременых запросов, т.е. сам и так использует многопоточность для организации ответов многим пользоватеям.
А вы еще и каждый раз начинаете сами плодить потоки, которые вообще-то ничего сами по себе не ускоряют, понятно.
Скорее тогда уж стоит устроить некий back-ground процесс, который будет эти индексы перестраивать периодически.
А то ка кринутся 10 (всего лишь) одновременных клиентов к такому скрипту - и все умрет на ожидании перестроения индексов, что, как было сказано - есть операция монопольная.
Anatoly Podgoretsky (2007-12-13 15:32:00) [12]> phantom (13.12.2007 15:15:11) [11]
А я думаю, что по логике будет значительно медленнее, во первых реиндексация монопольная операция, во вторым диск медленное устройство и елозить по нему головкой накладно, а еще затраты на переключение потоков.
Сергей М. (2007-12-13 15:27:00) [13]
> По логике вещей должнобыть в полтора раза быстрее чем все
> последовательно делать
Нет, не должно.
phantom (2007-12-13 15:15:00) [14]Потока 3, два реиндексируют таблички(нормальные индексы подключить нельзя- Cliper вещь в себе) третий дожидается окончания и формирует страничку. По логике вещей должнобыть в полтора раза быстрее чем все последовательно делать.
Сергей М. (2007-12-13 14:49:00) [15]
> поток должен проиндексировать табличку
В смысле дополднительный ?
А основной все это время чем будет занят ?
phantom (2007-12-13 14:32:00) [16]Спасибо огромное за разъяснение. Несколько потоков хочу сделать тк сервер многопроцессорный, а поток должен проиндексировать табличку и по моему мнению так будет быстрее.
TTable решил делать в RT , но я так понял если добавить в проект DataModule то можно и так сделать .
Palladin (2007-12-13 12:40:00) [17]
> Сергей М. © (13.12.07 12:35) [7]
опыт, старый опыт :)
проверь :) да и зачем, вот кусок
procedure TWebApplication.CreateForm(InstanceClass: TComponentClass;
var Reference);
begin
// Support CreateForm for backward compatability with D3, D4, and
// D5 web modules. D6 generated web modules register a factory.
if WebModuleClass = nil then
WebModuleClass := InstanceClass
else if WebModuleClass <> InstanceClass then
raise Exception.CreateRes(@sOnlyOneDataModuleAllowed);
end;
Сергей М. (2007-12-13 12:35:00) [18]
> Palladin © (13.12.07 12:29) [6]
> не важно, глобальная ссылка
С чего ты взял ?
Это только если заготовка проекта была сделана по станд.шаблону эксперта и не претерпела после этого изменений в части переноса ид-ра WebModule1 из раздела ид-ров глоб.переменных куда-либо еще
Palladin (2007-12-13 12:29:00) [19]
> Сергей М. © (13.12.07 12:23) [5]
а не важно, глобальная ссылка
Var
WebModule1:TWebModule1
равна Nil
нужно искать другие пути, либо создавать TTable в RT, либо на TWebModule1.OnCreate сохранять Self вручную...
Сергей М. (2007-12-13 12:23:00) [20]Речь идет о standalone-приложении или о библиотеке ?
Поясни, зачем вообще нужна многопоточность ..
В какой момент создается объект, на который ссылается WebModule1 ?