diff --git a/doc-assets/lws-smp-example.png b/doc-assets/lws-smp-example.png new file mode 100644 index 00000000..8ea23fa9 Binary files /dev/null and b/doc-assets/lws-smp-example.png differ diff --git a/doc-assets/lws-smp-ov.png b/doc-assets/lws-smp-ov.png new file mode 100644 index 00000000..5faf17fa Binary files /dev/null and b/doc-assets/lws-smp-ov.png differ diff --git a/minimal-examples/http-server/minimal-http-server-smp/README.md b/minimal-examples/http-server/minimal-http-server-smp/README.md index 62102843..c2a36aa9 100644 --- a/minimal-examples/http-server/minimal-http-server-smp/README.md +++ b/minimal-examples/http-server/minimal-http-server-smp/README.md @@ -1,5 +1,20 @@ # lws minimal http server with multithreaded service +Lws supports multithreaded service... build lws with `-DLWS_MAP_SMP=`, the +default is 1. If nonzero, some extra pthreads locking is built into lws and it supports multiple +independent service threads. + +![lws-smp-overview](../../../doc-assets/lws-smp-ov.png) + +When an incoming connection is accepted, it is bound to the pt with the lowest current wsi +count, to keep the load on the threads balanced. Only the pt the wsi is bound to can service +the thread, so although there can be as many wsi being serviced simultaneously as there are +service threads, a wsi can only be service by the pt it is bound to. + +The effectiveness of the scalability depends on the load. Here is an example of roughly what can be expected + +![lws-smp-example](../../../doc-assets/lws-smp-example.png) + ## build ```