Перейти к основному содержимому

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