Настройка однопоточности в PHP или эмуляция однопоточности.

imellfu

Guest
Настройка однопоточности в PHP или эмуляция однопоточности.

Всем привет!
Значит суть проблемы такова, есть два пользователя, практически одновременно активизирующих сервер через командную строку в броузере. Если они начинают работать с файлом, писать, читать в него всякую инфу, то при разных стечениях обстоятельств, могут получаться глюки. Например вот скрипт:

<?php
...
$f = @file ("file_base.dat", "r"); // здесь находится 2 пользователь
...
...
$fp = @fopen ("file_base.dat", "w"); // здесь находится 1 пользователь
...
...
@fclose ($fp);
...
?>
Очевидно, что в этом случае БД будет потеряна.

Так, вот, можно наизвращвться, понаделать там всяких flock и т.д., но! для чего так извращаться, почему бы не настроить PHP для однопоточности или, если это невозможно, почему не эмулировать однопоточность?
 

Demiurg

Guest
В настройках веб-сервера вполне можно можставить max_connection = 1, только как раз это и будет ищвращением. flock - это правильный выход.
 

imellfu

Guest
Во-первых, max_connections, ваще нет в канфиге, точно есть такая фича???:confused:

max_connections - это количество одновременно выполняемых скриптов или количество одновременных сессий, а то чё то я не нашёл в инете чё значит эта хрень...

А у второго пользователя не будет выскакивать ошибка что типа нет свободного слота для коннекта???

Если будет выскакивать ошибка, то это не решение проблемы, а отстой полный.

Если не будет ничего выскакивать, и max_connections - это количество одновременно выполняемых скриптов, и он будет просто спокойно ждать освобождения транслятора от выполнения предыдущего скрипта, чтобы загрузить следующий, то это прекрасный выход на 5 балов, и спасибо Вам, гениальный человек!

Если же что-то ни так, то введите меня пжаласта в курс дела :rolleyes:

Вообще я хочу сделать так, чтобы в начале выполнения скрипта, в файл "executing.txt" записывалось значение "1". А функцию exit заменить на ф-ю например i_exit в которой будет запись в файл "executing.txt" нуля, а потом уже и выход.
 

Demiurg

Guest
imellfu
я тебе не буду ничего отвечать, ты идешь неверной дорогой.
скажи, чем тебе не нравится flock ?
 

imellfu

Guest
Демиург, если ты не хочешь отвечать, то нафига ты пишешь тут! Пусть Пишут люди, которые приводят аргументы, чтобы другим потом не пришлось задавать данный вопрос заново! А вот твоё - "это неверный путь", ну и что может быть и неверный, но для меня, на данный момент, это всего лишь твоё личное мнение, а к таким аргументам как "по-моему" или "я думаю", я редко прислушиваюсь, так что давай, аргументируй!

Мне не flock не нравится, не исключено что именно с его помощью, я буду я буду предотвращать ошибочные записи в "executing.txt", я просто не хочу чтобы одновременно генерировалось более одной страницы.
Для чего? В одном месте я забуду flock и потеряю БД, а это смерти подобно! К тому же одним flock-ом не обойдёшься при защите от глюков, возможных при записи-чтении.
Так же, мне не нужны лишние функции и лишние строчки кода.
Могу сказать точно одно, что последовательное выполнение скрипта, последовательный доступ к файлам, намного надёжнее чем параллельный!

Компьютер начнёт генерить странички быстрее, если будет выполнять два скрипта, а может и нет, честно говоря яне знаю... Почему бы тогда не сделать второму пользователю, т.е. ждущему, цикл, который каждые 100 милисекунд будет проверять выполняется скрипт или нет? Если выполняется, то пусть ждёт ещё 100 милисекунд, если нет, то пусть идёт с богом вперёд.

И ваще, не понимаю, нафига админы кинули эту тему в общие, на самом деле это тема для "продвинутых". Не исключено, что именно такой прийм скоро будет использоваться на множестве сайтов. Может быть я ошибаюсь, но кто способен меня логически и фактически разубедить в этом???

И ещё, Демиург, если твоё следущее сообщение будет однострочным или двустрочным, то лучше его не пиши. Если хочешь дать людям инфу, то дай её, распиши всё подробно, а если ты собираешься тут самоутверждаться говоря, что ты умный, а я не прав, то хватит тут мусорить, это серьёзная тема, к которой надо серьёзно подойти, понятно!
 

Demiurg

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

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

> не исключено, что именно так скоро будут писаться сайты.
Исключено, серверы имеют свойство иметь более одного процессора.

-~{}~ 30.04.05 13:04:

>это серьёзная тема, к которой надо серьёзно подойти, понятно!
мне так не кажется.
 

imellfu

Guest
О инфа!

Про время чтения записи, файл который читается впервые, действительно может читаться довольно долго, но с файлом, к которому уже было обращение, который засел в память, ОС работает намного быстрее! Вот, это раз.

Ещё я думаю, время выполнения скрипта напрямую зависит от процессора и жесткого диска, т.е. при выполнении скрипта, в принципе ресурсы сжираются на 100%. Следовательно, второй пользователь страничку получит не намного быстрее, при последовательном выполнении, чем при параллельном

Ещё, ограничение, то, будет только для одного сайта, а на серваке, этих сайтов может быть несколько. А если у сайта посещаемость более 10.000 человек в час, то ограничения можно поставить на выполнение разных кусков сайта...
 

Gas

может по одной?
imellfu
Поток сознания. Соберись с мыслями и скажи что тебе нужно.
А если у сайта посещаемость более 10.000 человек в час
"Планы часто остаются только планами" @кто-то из phpclub'а
 

Demiurg

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

А вобще я не понял связь кеширования файловой системой и последовательным обращением к файлу. Ну ладно, повторюсь еще раз, все, что ты тут пытаешься придумать на счет файлов придумали за долго до тебя. И я тебе уже сказал, что чтение файла - это не единственная операция, которую делает скрипт. Пусть скрипты читают файл по очереди, вернее пишут пусть по очереди, но строить странички они вполне могут паралельно.
 

imellfu

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

Demiurg

Guest
не желающему слушать доказать что-то сложно.
 

Crazy

Developer
Demiurg, а главное -- было бы зачем. :) "Нет! Вы мне не доказали, что плавать с чугунной гирей на шее неудобно!"
 

imellfu

Guest
Ну, уважаемые, вам бы на базаре торговать, а не на научно познавательном форуме, посвященном языку программирования PHP посвященному сидеть и отвечать на посты.

Демиург - не желающий говорить, хрен слово вытянешь, а всё что написано, я прочитал, а слух тут вообще причём... Вообще я всё уже понял, не утруждайтесь объяснить мне то, чего сами не хотите понять.

Крейзи, умник, а твоё мнение, ваще для меня очень важно, ты тут такие факты и доводв привёл! У-у-у-у! Ты просто гений, от тебя толку как от очень важного и умного человека!

"А главное - было бы зачем" - а прочитать, не судьба?
И вы мне действительно не доказали, что плавать с чугунной гирей на шее неудобно, вы действительно талантливые люди! Можете отстоять свою точку зрения, РЕСПЕКТ!
 

swamp_demon

Новичок
imellfu , что-то ты вообще людей не слушаешь умные ведь вещи говорят. Flock и ничего больше.

А названии темы в корне неверно, какая нафик однопоточность ? Ведь с 1 общим файлом работаешь.

з.ы. А если уж у тебя портал с 10 тысячами посещений, используй БД и не парься.
 
Сверху