This is a research guide based on cited documentation. It is not a report of firsthand testing. Our editorial method

What a PHP worker is

Kinsta defines a thread as 'a PHP process that handles one incoming request at a time' and notes threads were previously called PHP workers. WP Engine says each uncached page request is handled by a PHP worker and compares workers to cashiers handling one transaction each. On a server you manage, PHP-FPM's pm.max_children 'sets the limit on the number of simultaneous requests that will be served'.

Cached pages do not use workers. WP Engine states that only uncached traffic can receive a 504, because cached requests do not queue for PHP workers. That is why a sales page survives a traffic spike while the student dashboard does not.

Why course traffic is mostly uncached

Hosts deliberately skip the cache for logged-in users. Kinsta's edge caching says anywhere a user is logged in bypasses caching. WP Engine's page cache excludes pages where a cookie containing 'wordpress_' has a value set, along with wp-admin and wp-login.php. SiteGround's CDN reports BYPASS when you are logged in.

For a course site this means the pages students use most (lessons, quizzes, progress, certificates, account pages) each need a worker, plus AJAX calls that LMS and membership plugins make in the background. WP Engine lists ad plugins that hit admin-ajax.php among the plugins that tend to overwhelm PHP workers.

What each host documents

HostWhat is publishedHow to get more
KinstaThreads per site drawn from a memory pool; WP 5 allows up to 4 threads; a 1GB pool can run 4 threads at 256MB or 8 at 128MB; standard staging is capped at 2 threadsPHP performance add-on: $10 per additional 500MB a month; re-split the pool into more threads
WP EngineQueue behaviour: separate priority queues per account and traffic type, human traffic highest; requests over 60 seconds are cut off; page cache 600 seconds by defaultImprove cacheability, block abusive traffic, or move to a larger server with more workers
SiteGroundNo worker count on the shared plan pageAsk support for the limit on your plan before a cohort launch
DigitalOcean DropletNothing fixed; you choose pm (static, dynamic, ondemand) and pm.max_children in PHP-FPMRaise max_children within RAM and CPU, or resize the Droplet

How a queue turns into errors

WP Engine's 504 article describes the sequence: when workers cannot finish requests as fast as they arrive, a backlog forms; when the workers and backlog are both full, the oldest waiting request is evicted and that visitor sees a 504. Requests running longer than 60 seconds are terminated and show as 502s, and both errors together mean too many long requests at once.

Its prioritisation article adds that bots, AJAX and XMLRPC see errors well before real users because they sit in lower-priority queues. A student whose quiz autosave fails silently may be the first symptom, before anyone reports a 504.

On your own server, PHP-FPM's listen.backlog defaults to 511 on Linux, and request_terminate_timeout defaults to 0 (off), so a stuck request can hold a worker indefinitely unless you set a timeout.

Worked example: 300 students finishing a quiz at a deadline

Hypothetical cohort: 300 students submit a timed quiz in the same two-minute window. Each submission triggers about 3 uncached requests (the submit, the results page and a progress AJAX call): 900 requests in 120 seconds is 7.5 requests per second.

Busy workers = arrival rate x average time per request. If the LMS answers in 0.4 seconds, 7.5 x 0.4 = 3 workers busy on average. Arrivals bunch in the final seconds, so plan for at least double: 6 workers. A plan with 4 threads will queue during the peak.

If a slow quiz-statistics query raises average time to 1.2 seconds, 7.5 x 1.2 = 9 busy on average and 18 at a doubled peak. More workers alone will not fix that; profile the query or add an object cache first.

On Kinsta, 8 threads at 256MB each need a 2GB pool. If your plan's default pool is 1GB, adding 1GB costs 2 x $10 = $20 a month. Alternatively, 8 threads at 128MB fit in 1GB, but Kinsta warns that more threads means less memory per thread, so test the quiz page's memory use on staging first. Standard staging is limited to 2 threads, so load-test the live configuration carefully or during a quiet window.

Before buying more workers

  • Measure average PHP time for your busiest logged-in page; the arithmetic above is only as good as that number.
  • Find AJAX calls that fire on every lesson view and cache or remove them where possible.
  • Stagger deadlines across time zones or groups so 300 submissions are not in the same two minutes.
  • Add a persistent object cache if your host offers one, to shorten each request.
  • Keep video and large downloads off the web server so workers are not tied up serving files.
  • On a VPS, set pm.max_children from measured memory per PHP process and available RAM after the database, and set request_terminate_timeout.

Questions before you decide

Are PHP workers and PHP threads the same thing?

In hosting documentation, yes. Kinsta renamed workers to threads; each handles one request at a time, as WP Engine's workers and PHP-FPM's child processes do.

Will more workers make my site faster?

Only if requests are waiting in a queue. If each request is slow, more workers serve more students at the same slow speed and may use more memory. Fix slow queries first, then size workers for the peak.

Why do errors appear during a cohort start but not during a marketing launch?

Marketing visitors are mostly served from the page cache. Logged-in students bypass it, so every click needs a PHP worker.

Sources & verification

Product details and prices can change. Check the linked provider before buying.

  1. Kinsta: PHP performance (threads and memory pool) Accessed 29 Oct 2026
  2. Kinsta: Billing for WordPress hosting plans Accessed 29 Oct 2026
  3. Kinsta: Edge caching Accessed 29 Oct 2026
  4. WP Engine: PHP workers and request prioritization Accessed 29 Oct 2026
  5. WP Engine: Fix 504 gateway timeout errors Accessed 29 Oct 2026
  6. WP Engine: Server and browser caching Accessed 29 Oct 2026
  7. SiteGround: Web hosting plans Accessed 29 Oct 2026
  8. SiteGround KB: SiteGround CDN configuration, headers and purging Accessed 29 Oct 2026
  9. PHP manual: FPM configuration Accessed 29 Oct 2026
  10. DigitalOcean: Droplet pricing Accessed 29 Oct 2026

Sources link directly to providers. Product buttons may use separately labeled affiliate links. Read our disclosure.

Your decision at a glance

Compare the options

Full comparison

Documentation-based guidance. No tested ranking or performance score.

Managed WordPress

Kinsta

Consider it for
Use Kinsta Single 20GB, listed at $35/month, when a WordPress course site needs published PHP-capacity controls and a staging rehearsal.
Starting cost
Single 20GB listed $35/month on 2026-09-15; first-month promotions and annual billing change the cash invoice
Before you choose
Do not treat visitor allowances as class concurrency. No plan here is verified for a specific learner count.

Checked 15 Sep 2026 · Pricing source

View Kinsta plans

Direct provider link; no affiliate tracking added by this publication. Link disclosure

Managed WordPress

WP Engine

Consider it for
Use WP Engine Essential when the quoted plan covers your plugin stack, membership cache rules, and an isolated staging copy.
Starting cost
Essential 1-site card displayed $336/year on 2026-09-15 with promotional first-year pricing; confirm undiscounted checkout
Before you choose
Skip if you cannot rehearse membership access and payments at the destination. No measured speed advantage is claimed.

Checked 15 Sep 2026 · Pricing source

View WP Engine plans

Direct provider link; no affiliate tracking added by this publication. Link disclosure

Shared hosting

SiteGround

Consider it for
Use SiteGround StartUp, advertised at $2.99/month for a prepaid first 12 months then $17.99/month, when one WordPress site needs shared hosting rather than a server you administer.
Starting cost
StartUp first-term $2.99/mo prepaid 12 months, renews $17.99/mo on 2026-09-15 (world page: ex. VAT); 1 website, 10GB, ~10,000 visits marketing estimate
Before you choose
Visit marketing estimates are not class concurrency. Renewal is $17.99/mo after the prepaid term. No course-capacity test is claimed.

Checked 15 Sep 2026 · Pricing source

View SiteGround plans

Affiliate link: we may earn a commission on an eligible purchase. Link disclosure

Cloud VMs

DigitalOcean

Consider it for
Use a DigitalOcean Droplet when you will administer a cloud VM, not when you need managed WordPress hosting.
Starting cost
Basic Droplet listed from $4.00/mo (512 MiB, 1 vCPU, 10 GiB SSD, 500 GiB transfer) on 2026-09-15; 3 static sites listed free. Confirm live checkout and bandwidth overage.
Before you choose
A listed VM size is not a WordPress or course-capacity claim. You own OS, updates, backups, and mail unless a separate product says otherwise. The static-site free tier is not a course site.

Checked 15 Sep 2026 · Pricing source

View DigitalOcean plans

Direct provider link; no affiliate tracking added by this publication. Link disclosure