coro
Реализация сопрограмм Nim, поддерживает несколько методов переключения контекстов:
| ucontext | доступно в unix и подобных системах (по умолчанию) |
| setjmp | доступно в unix и подобных системах (только x86/64) |
| fibers | доступно и необходимо в Windows. |
| -d:nimCoroutines | Требуется для сборки этого модуля. |
|---|---|
| -d:nimCoroutinesUcontext | Использовать бэкэнд ucontext. |
| -d:nimCoroutinesSetjmp | Использовать бэкэнд setjmp. |
| -d:nimCoroutinesSetjmpBundled | Использовать встроенную реализацию setjmp. |
Нестабильный API.
Поддержка таймеров для реального времени сборки мусора. Основано на https://github.com/jckarter/clay/blob/master/compiler/hirestimer.cppИмпорты
- os, списки
Типы
CoroutineRef = ref object coro: CoroutinePtr
- CoroutineRef содержит указатель на фактический объект сопрограммы. Публичный API всегда возвращает CoroutineRef вместо CoroutinePtr, чтобы разрешить удержание ссылки на объект сопрограммы, в то время как он может быть безопасно удален циклом планировщика сопрограмм. В этом случае Coroutine.reference.coro устанавливается в nil. Публичный API проверяет, что это nil, и изящно завершает работу, если это nil. Исходный код Редактировать
Процедуры
proc suspend(sleepTime: float = 0) {...}{.raises: [], tags: [].}- Останавливает выполнение сопрограммы и возобновляет не ранее, чем через
sleeptimeсекунды. До этого момента другие сопрограммы выполняются. Исходный код Редактировать proc start(c: proc (); stacksize: int = defaultStackSize): CoroutineRef {...}{. discardable, raises: [], tags: [RootEffect].}- Планирует сопрограмму для выполнения. Она не выполняется немедленно. Исходный код Редактировать
proc run() {...}{.raises: [], tags: [TimeEffect].}- Исходный код Редактировать
proc alive(c: CoroutineRef): bool {...}{.raises: [], tags: [].}- Возвращает
trueесли сопрограмма еще не вернулась,falseв противном случае. Исходный код Редактировать proc wait(c: CoroutineRef; interval = 0.01) {...}{.raises: [], tags: [].}- Возвращает только после того, как сопрограмма
cвернулась.interval- время в секундах, как часто. Исходный код Редактировать
© 2006–2021 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/coro.html