Light threads are not scheduled pre-emptively, that is, a cooperative scheduling model is implemented. So if you are launching hundreds of thousands of light threads, you should ensure that they either yield control with reason, or perform some action that automatically results in a yield so that other light threads (as well as other events in the worker process) get their turn.
My guess is that the spin-up time to send out several hundred or thousand upstream socket calls could take a considerable amount of time, but the definition of an 'acceptable' delay would likely vary by use case. Assuming that each call to a given endpoint that launches this level of threads is hit regularly, memory consumption from spawning new threads may be a concern as well. Benchmarking your particular use case would be give the most concrete answer here.
And I would strongly recommend that if you are using these threads to initiate calls to remove servers, you store connections to those servers in a socket keepalive pool (assuming TCP). The overhead of a three-way handshake several hundred of thousand times repeatedly would be a nontrivial waste of wait time and packet round trips. Ensure that whatever library you're using allows for TCP socket keepalives, or if you're rolling your own socket calls, have a look at
https://github.com/openresty/lua-nginx-module#tcpsocksetkeepalive.