Pull to refresh
  • by relevance
  • by date
  • by rating

Боремся с race condition в PHP

PHP *
Sandbox
Ошибки типа «Состояние гонки» (race condition) редко встречаются на малонагруженных проектах, а с ростом нагрузки ситуация медленно, но верно меняется. И однажды обычное кеширование данных в файле, например, вот такое:

function getFlagFromFile($filename) {
    if (file_exists($filename)) {
        if (!$this->validate()) { // а не устарел ли файл?
            unlink($filename);
            return false;
        }
        else {
            return file_get_contents($filename);
        }
    }
    return false;
}

выдаёт ошибку в строке unlink(): файл $filename не существует!
Читать дальше →
Total votes 46: ↑32 and ↓14 +18
Views 5.1K
Comments 77

PHP IPC — Межпроцессное взаимодействие в PHP

PHP *

Целью данной заметки является ознакомление PHP-разработчиков с возможностями межпроцессного взаимодействия в данном языке. Заметка не предполагает во всех деталях рассказать о каждой из возможностей, деталях реализации или показать рабочие примеры кода.

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

Хотите узнать больше?
Total votes 47: ↑42 and ↓5 +37
Views 26K
Comments 78

Знакомство с сервисами передачи сообщений PHP

PHP *Java *
Translation
Узнаем больше о тонкостях основных сервисов передачи сообщений, доступных в PHP.

  1. Семафоры
  2. Gearman
  3. JMS с PHP через QUERCUS
  4. JMS с PHP через PHPMQ->MANTARAY


1. Семафоры


Semaphore представляет собой модуль PHP, который фактически состоит из трех расширений, которые включает семафоры, разделяемую память и межпроцессный обмен сообщениями (IPC). Этот модуль предоставляет оболочки для семейства System V IPC функций и чтобы использовать его в PHP, вам необходимо включить его, потому что он не является включенным по умолчанию, поэтому для включения поддержки System V семафоров PHP используйте опцию --enable-sysvsem; чтобы включить поддержку разделяемой памяти System V скомпилируйте PHP используя опцию --enable-sysvshm; и для того, чтобы включить поддержку сообщений System V скомпилируйте PHP используя опцию --enable-sysvmsg.
Читать дальше →
Total votes 10: ↑6 and ↓4 +2
Views 12K
Comments 2

Семафоры, или как разруливать доступ к ресурсам в DBMS Caché

InterSystems corporate blog Programming *Concurrent computing *
Tutorial
Часто при многопользовательском или параллельном доступе к данным возникает ситуация, когда необходимо заблокировать/дать доступ к переменной или участку памяти одновременно нескольким процессам. Решается данная задача с помощью мьютексов, семафоров, мониторов и т. д. В данном посте рассмотрим как же реализован один из методов предоставления совместного доступа к данным — семафор — в СУБД Intersystems Caché.

Что же такое семафор в Cache и с чем его едят?
Total votes 19: ↑16 and ↓3 +13
Views 7.7K
Comments 6

STM32 и FreeRTOS. 2. Семафорим по-черному

Website development *Open source *
Tutorial
Часть первая, про потоки

В реальной жизни часто случается так, что некоторые события происходят с разной переодичностью (а могут и вообще не происходить). Скажем, заказ сока в «Макдональдсе», нажатие кнопки пользователем или заказ лыж в прокате. А наш могучий микроконтроллер должен все это обрабатывать. Но как это сделать наиболее удобно?

Читать дальше →
Total votes 25: ↑24 and ↓1 +23
Views 54K
Comments 5

Такие удивительные семафоры

Programming *C++ *Concurrent computing *
Translation
От переводчика: Джефф Прешинг (Jeff Preshing) — канадский разработчик программного обеспечения, последние 12 лет работающий в Ubisoft Montreal. Он приложил руку к созданию таких известных франшиз как Rainbow Six, Child of Light и Assassin’s Creed. У себя в блоге он часто пишет об интересных аспектах параллельного программирования, особенно применительно к Game Dev. Сегодня я бы хотел представить на суд общественности перевод одной из статей Джеффа.

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

Раньше я думал, что семафоры давно устарели. В 1960‑х, когда еще мало кто писал многопоточные программы, или любые другие программы, Эдсгер Дейкстра предложил идею нового механизма синхронизации — семафор. Я знал, что при помощи семафоров можно вести учет числа доступных ресурсов или создать неуклюжий аналог мьютекса, но этим, как я считал, область их применения ограничивается.
Читать дальше →
Total votes 38: ↑37 and ↓1 +36
Views 115K
Comments 1

Вся правда об ОСРВ от Колина Уоллса. Статья #5. Взаимодействие между задачами и синхронизация

Programming microcontrollers *
Translation


В предыдущих статьях мы рассмотрели многозадачную модель, и выяснили, что каждая задача является квазинезависимой программой. Хотя задачи во встраиваемых системах имеют определенную степень независимости, это не означает, что они не «знают» друг о друге. Некоторые задачи будут действительно изолированы от других, но взаимодействие и синхронизация между ними является распространенным требованием. Этот механизм является одной из ключевых функций ОСРВ. Диапазон функций может варьироваться в зависимости от ОСРВ, поэтому в этой статье мы рассмотрим общедоступные варианты.
Читать дальше →
Total votes 8: ↑6 and ↓2 +4
Views 2.7K
Comments 0

Вся правда об ОСРВ. Статья #19. Семафоры: введение и базовые службы

Programming microcontrollers *
Translation


Семафоры были упомянуты в одной из предыдущих статей (#5). Их основная задача – управление доступом к ресурсам.
Читать дальше →
Total votes 13: ↑12 and ↓1 +11
Views 1.9K
Comments 0

Вся правда об ОСРВ. Статья #20. Семафоры: вспомогательные службы и структуры данных

Programming microcontrollers *
Translation


В этой статье продолжается обзор семафоров.

Вспомогательные службы семафоров


Nucleus RTOS имеет четыре вызова API, предоставляющие функционал, связанный с семафорами: сброс семафора, получение информации о семафоре, получение количества семафоров в приложении и получение указателей на все семафоры в приложении. Первые три из них реализованы в Nucleus SE.
Читать дальше →
Total votes 5: ↑4 and ↓1 +3
Views 1.2K
Comments 0

Знакомимся с семафорами в Linux

OTUS corporate blog Configuring Linux *
Translation
Перевод статьи подготовлен в преддверии старта курса «Administrator Linux.Basic».






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

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

Есть три вида семафоров:

  1. Бинарные семафоры (binary semaphore)
  2. Семафоры-счетчики (counting semaphore)
  3. Массивы семафоров (semaphore set)
Читать дальше →
Total votes 18: ↑7 and ↓11 -4
Views 6.1K
Comments 4