Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> выполнение алгоритма в определенное время 
:(
    Опции темы
Alix36
Дата 10.7.2011, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 478
Регистрация: 6.11.2006

Репутация: 1
Всего: 3



Предположим есть такая задача.
В неком хранилище (Таблица в базе, стэк в кэше) храниться список отложенных задач. Нужно написать к ним обработчик.
Вопрос как лучше это сделать. 

Варианты
1) Хранилище: БД? память? файл?
Поскольку задачи могут быть запланированы даже на соседние секунды, то запрос к бд придется делать ежесекундно, что может пагубно сказаться на БД, даже если каждый запрос будет возвращать по 2 строки.
С файлом еще хуже, мало того что может сильно обидеться контроллер диска на ежесекундное чтение/добавление, так еще и интерфейс обращение не такой удобный.

Выбор однозначно память? или все таки вариант с БД имеет право на жизнь?

2) "Выполнятор": Cron, демон
Насколько плох ежесекундный вызов cron'ом какого-либо скрипта?
 
Хотя плюсы демона мне тоже не очевидны. Как стоит реализовывать демона, выполняющего отложенные таски? Как вечный цикл, проверяющий "просроченные" таски? тогда обращение к хранилищу будет чаще чем ежесекундно... Даст ли реализация с демоном какие-либо преимущества? или все же демоны хороши исключительно для отлова входящих "сигналов"(пакетов, сообщений)


--------------------
Наши лица как дым, И никто не узнает как мы победим. (С)Пикник.
PM MAIL   Вверх
ivashka
Дата 10.7.2011, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 6.6.2006

Репутация: нет
Всего: нет



Как по мне то однозначно БД только таблица MEMORY (если нужно что бы надежность была выше, задания хранятся в обычной таблице, а при старте скрипта копируем в таблицу мемори).
В таком случае будет и интерфес удобный, и скорость норм, и хард дольше и лучше жить.

На счет реализации, то как я понимаю будет пхп, тогда вариант с демоном. 

Логика следующая, запускается демон, смотрит есть ли задачи к выполнению, если есть, передает берет задачу, форкается и форк исполняет задание, главный процесс смотрит дальше есть ли задачи.

Такой вариат у меня работает без перерыва уже 9 месяц. 
PM MAIL   Вверх
Alix36
Дата 10.7.2011, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 478
Регистрация: 6.11.2006

Репутация: 1
Всего: 3



Цитата(ivashka @  10.7.2011,  12:51 Найти цитируемый пост)
(если нужно что бы надежность была выше, задания хранятся в обычной таблице, а при старте скрипта копируем в таблицу мемори)

Вот тут не понял, зачем вторая таблица?
Цитата(ivashka @  10.7.2011,  12:51 Найти цитируемый пост)
 главный процесс смотрит дальше есть ли задачи

Вот это тоже интересный моменет. "Смотреть, есть ли задачи" получается можно только выборкой из БД.  Тогда в главном треде получаем while(1) с селектом внутри...  Соотв. селект будет выполняться до нескольких десятков раз в секунду. 

---
Может тогда лучше так. 
Главный тред - хранит в памяти всю очередь. Зациклен и вызывает в отдельных тредах обработку каждого "подоспевшего" таска. 
Так же главный тред разово стартует вторичный тред, который так же живет "вечно", выбирает и добавляет в  основную очередь новые таски и sleep'ает себя на 30* секунд.

*- минимальное время "задержки" выполнения таска.


Это сообщение отредактировал(а) Alix36 - 10.7.2011, 21:37


--------------------
Наши лица как дым, И никто не узнает как мы победим. (С)Пикник.
PM MAIL   Вверх
ivashka
Дата 11.7.2011, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 6.6.2006

Репутация: нет
Всего: нет



По поводу второй таблицы:
если у вас сервер упадет, все данные с мемори удалятся, соответственно и выходит 2 таблицы. Одна допустим innoDB вторая Memory.

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

Лучше выгребать хотябы по 5, или другое количество, но не всю, хотя вариант, выгребать все, проходится, слипнуться, выгребать все и т.д. вполне вменяем.

А зачем вторичный процес держать вечно, лучше форкать, одно задание одному ребенку.
PM MAIL   Вверх
solenko
Дата 11.7.2011, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 34
Всего: 67



Цитата(Alix36 @  10.7.2011,  11:39 Найти цитируемый пост)
список отложенных задач

Это задачи, которые нужно выполнять "как только получится", или "строго по расписанию"?
Если как только получится -- AMQ


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
Alix36
Дата 12.7.2011, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 478
Регистрация: 6.11.2006

Репутация: 1
Всего: 3



Цитата(ivashka @  11.7.2011,  11:36 Найти цитируемый пост)
По поводу второй таблицы:
если у вас сервер упадет, все данные с мемори удалятся, соответственно и выходит 2 таблицы. Одна допустим innoDB вторая Memory.


Я имел ввиду, что если у нас появляется inno-таблица то теряется смысл memory-таблицы. Зачем дублировать информацию, если и так уже храним в стабильной таблице.

Цитата(solenko @  11.7.2011,  13:05 Найти цитируемый пост)
Это задачи, которые нужно выполнять "как только получится", или "строго по расписанию"?

как только задача "просрочилась")
В любом случае вопрос именно в решении на php, а не в отдельном демоне.



--------------------
Наши лица как дым, И никто не узнает как мы победим. (С)Пикник.
PM MAIL   Вверх
baldina
Дата 12.7.2011, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 26
Всего: 101



Цитата(Alix36 @  12.7.2011,  16:32 Найти цитируемый пост)
В любом случае вопрос именно в решении на php, а не в отдельном демоне.

почему? просто интересно
Цитата(Alix36 @  10.7.2011,  12:39 Найти цитируемый пост)
Насколько плох ежесекундный вызов cron'ом какого-либо скрипта? 

в принципе неплох. cron как таковой очень мало нагружает систему. и уж по крайней мере не надо думать о "тредах и слипах"

cron+БД+скрипт на любом языке позволят решить задачу быстро. если упрется в эффективность, тогда рассматривать другие варианты
такое решение позволяет провести быстрое прототипирование, сосредоточиться на главном.

а что известно про задачи и их количество? скажем, если задач немного, но они ёмкие, механизм вызова не влияет на загрузку, и наоборот
про БД думаю беспокоиться не стоит, её для того и придумали, штоб работала. ежесекундный запрос для базы, возвращающий 2 короткие записи - сущий пустяк. к тому же в таком режиме оно вероятно в кэше поселится.
PM MAIL   Вверх
Alix36
Дата 12.7.2011, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 478
Регистрация: 6.11.2006

Репутация: 1
Всего: 3



Цитата(baldina @  12.7.2011,  16:50 Найти цитируемый пост)
в принципе неплох. cron как таковой очень мало нагружает систему. и уж по крайней мере не надо думать о "тредах и слипах"


 форкать все равно нужно будет, если будут массивные задачи. и по несколько в секунду, их нужно разносить на форки. или каждую секунду выбирать по 1 таску, тогда получим накопление очереди, точнее можем получить


Цитата(baldina @  12.7.2011,  16:50 Найти цитируемый пост)

почему? просто интересно


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



--------------------
Наши лица как дым, И никто не узнает как мы победим. (С)Пикник.
PM MAIL   Вверх
srt
Дата 12.7.2011, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 13.5.2008

Репутация: нет
Всего: 1



Alix36, как тебе удобно, так и сделай
крон или крен - пофик
PM MAIL   Вверх
baldina
Дата 12.7.2011, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 26
Всего: 101



Цитата(Alix36 @  12.7.2011,  18:55 Найти цитируемый пост)
форкать все равно нужно будет

форкать в баше попроще чем в php ;-)
PM MAIL   Вверх
srt
Дата 12.7.2011, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 13.5.2008

Репутация: нет
Всего: 1



отложенные задачи - отложенные задачи
реализовать либо по времени либо по событию
ну дык
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1424 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.