Skillshub php-concurrency
Handling concurrency and non-blocking I/O in modern PHP. Use when implementing concurrent requests, async processing, or non-blocking I/O in PHP. (triggers: **/*.php, Fiber, suspend, resume, non-blocking, async)
install
source · Clone the upstream repo
git clone https://github.com/ComeOnOliver/skillshub
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/HoangNguyen0403/agent-skills-standard/php-concurrency" ~/.claude/skills/comeonoliver-skillshub-php-concurrency && rm -rf "$T"
manifest:
skills/HoangNguyen0403/agent-skills-standard/php-concurrency/SKILL.mdsource content
PHP Concurrency
Priority: P2 (MEDIUM)
Structure
src/ └── Async/ ├── Schedulers/ └── Clients/
Implementation Guidelines
PHP Fibers (8.1+)
- Multitasking: Use
for low-level cooperative multitasking.new Fiber() - Yielding Control: Use
to yield execution back to the caller.Fiber::suspend('paused') - Resuming: Call
to continue execution. Catch exceptions via$fiber->resume('hello')
.$fiber->getReturn() - Isolation: Use separate PDO connections per Fiber to avoid shared mutable state.
Non-blocking I/O & Event Loops
- Loop Setup: Use ReactPHP or Amp. Call
to access the event loop.Loop::get() - HTTP Clients: Use
or the Guzzlereact/http
for concurrent requests.Pool($client, ...) - I/O Safety: Never use blocking
orfile_get_contents
inside a Fiber or EventLoop.sleep() - Entry Point: Run
at your application entry point to start the async loop.Loop::run()
Concurrency Strategies
- Queued Jobs: For heavy concurrency, prefer Laravel Horizon or Symfony Messenger over raw PHP Fibers.
- Self-Contained Logic: Ensure Fibers manage their own state and exceptions to prevent cross-contamination.
Anti-Patterns
- No deeply nested Fiber suspends: Keep Fiber logic traceable.
- No blocking I/O inside Fibers: Use async-compatible libraries.
- No custom scheduler code: Use Amp or ReactPHP instead.