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()