In the ST version of webcore, when an event comes into a piston,
The piston starts. (CS) - Child start
The piston asks the parent for locking and data. (PS). (Parent Start)
Then the piston finishes initializing. (PE). Parent end and piston finishing initialization
Then it runs your piston code. (actual execution time)
The waited at semaphore is a case where you have multiple instances of the same piston wanting to run, and these had to be serialized (the waited time).
In the latest version of webcore on HE, this stuff does not happen. The architecture is setup to
- not call the parent on each startup
- to do serialization via event queuing vs. waiting for a lock
On ST all these parent child calls (at piston start and piston stop) are a lot of overhead, and at the 99th percentile do not happen on HE.