Copas
Асинхронные IO запросы. По сути, для сокетов просто делает sock:settimeouts(0), затем используя корутины поллит данные sock:read(), за счет чего получается non-blocking запросы. Можно делать "асинхронные" HTTP клиенты, REDIS, MySQL драйверы и т.д.
Заметки по semaphore
- В отличии от lock семафор можно релизить (sema:give()) с других потоков (корутин).
sema:take()блочит поток, если ресурсы в sema закончились. Тогдаsema:get_wait()делается +1, аsema:get_count() == 0.same:take()не заблочит поток, если есть доступные ресурсы. Хочешь блочить сразу? Делайsemaphore.new(size, 0)sema:give()