rfc:async_signals

This is an old revision of the document!


PHP RFC: Asynchronous Signal Handling (without TICKs)

Introduction

Currently php may handle OS signals using pcntl extensions:

  • synchronously, calling pcntl_signal_dispatch() manually
  • asynchronously, compiling scripts with declare(ticks=1)

However, TICKs introduce huge overhead.

Proposal

Zend Engine in PHP 7.1 was extended with ability of safe time-out and interrupt handling. Actually, PHP VM checks for EG(vm_interrupt) flag on each loop iteration, user function entry or internal function exit, and call callback function if necessary.

I propose to use this ability to implement asynchronous signal handling. Registered signal handlers are going to be called at some points during user script execution without any overhead.

To keep ability of synchronous signal, handling we had to introduce a new INI directive pcntl.async_signals with default value 0. Bob pointed, that instead of INI directive, we may use function pcntl_async_signals(bool on_off). In my opinion, this doesn't make a big difference. In first case, some PHP script may don't know the value set through php.ini. In the second, it may don't know the previous value set through pcntl_async_signals().

Backward Incompatible Changes

None

Proposed PHP Version(s)

PHP 7.1

RFC Impact

php.ini Defaults

  • pcntl.async_signals=0

Proposed Voting Choices

The vote is a straight Yes/No vote, that requires a 2/3 majority. The vote will begin on July 8 and finish on July 15.

An additional 1/2 majority question: Use pcntl.async_signals INI directive or pcntl_async_signals() function.

Patches and Tests

The patch is really simple: PR 1953

Implementation

After the project is implemented, this section should contain

  1. the version(s) it was merged to
  2. a link to the git commit(s)
  3. a link to the PHP manual entry for the feature
rfc/async_signals.1466763293.txt.gz · Last modified: 2017/09/22 13:28 (external edit)