Fork
The `fork()` function is the Unix/Linux/POSIX way of creating a new process by duplicating the calling process.
Pthreads
Pthreads (POSIX Threads) is a standardised C-based API for creating and manipulating threads
Arguments clone like
Example |
---|
"Pthreads provides a more general interface to the fork system call than any of the other functions discussed here do but pthreads is not portable" from question Is fork() + exec() the only way to execute a process in Linux? |
"With various arguments clone can also have a fork 2 -like behavior;very few people directly use clone using the pthreads library is more portable" from question When is clone() and fork better than pthreads? |
Others
Example |
---|
From the pthreads spec section you quote above;the reference to create handles using fork isn t elaborated on further in this section but the spec for fork adds a little detail from question Atomicity of `write(2)` to a local filesystem |
Threads used to have vfork alognside fork and some systems may have some systems own mechanisms such as linux-specific clone but since 2008 pthreads specifies only fork and the posix_spawn family;vfork alognside fork is more traditional is well understood and has few drawbacks see below from question Time waste of execv() and fork() |
Since you say these are not pthreads but not what they are it s hard to generalize much more.;one way to make this work as described but of course actual code tends to vary from descriptions is to start the semaphore count at 0 fork a child have the child write without looking at the semaphore count fork another child have that child also write without looking at the semaphore count and then have the parent wait on the semaphore p from question Parent is executing before child process, how to force opposite through semaphores? |
The features stemming from those discussions permit less extreme fork than processes which is symmetrically like the provision of more extensive independence between pthreads from question Why does process creation using `clone` result in an out-of-memory failure? |
But when is fork and clone better than pthreads from question When is clone() and fork better than pthreads? There is a nice comparison of threads and processes here when is clone and fork better than pthreads from question How to create a two process in c for linux operating system? |
Multithreading is faster takes up less resources there is no separate namespace for it and you can run the 6 workers 4 times more than the fork but multithreading requires build php with non-zts some extensions do not work with non-zts and requires something you would understand pthreads model from question Run PHP with multithreading (tesseract) |
On pthreads systems spork uses kernel.fork;on windows fork is not an option so spork creates a pool of preloaded processes which from question Cucumber with Rails on Windows |