Как реализовать практический оптоволоконный планировщик?

Возможным решением является добавление массива 1d numpy, созданного из Series для предотвращения выравнивания столбцов DataFrame к индексу Series:

df = df + s.values
print (df)
          A         B         C
0  0.207070  1.995021  4.829518
1  0.819741  2.802982  2.801355

Если те же столбцы и значения индекса работают с sum:

[ 111]
9
задан Cheery 20 April 2009 в 10:11
поделиться

3 ответа

Вам нужно будет мультиплексировать операции io в событийный интерфейс (select/poll), чтобы вы могли использовать ОС для выполнения ожидания, при этом имея возможность планировать другие волокна. select/poll имеют аргумент таймаута - для волокон, которые хотят спать, вы можете создать очередь приоритетов, которая использует эту опцию select/poll для эмуляции спящего вызова.

Пытаясь обслуживать волокна, которые блокируют операции (чтение/запись вызова/сон и т.д.), непосредственно не сработает, если вы не запланируете каждое волокно в собственном потоке - какой вид бьёт по назначению.

Смотрите http://swtch.com/libtask/ для рабочей реализации.

.
7
ответ дан 4 December 2019 в 14:31
поделиться

С точки зрения реализации вы можете начать с реализации асинхронного цикла обработки событий. Затем вы можете просто реализовать планирование оптоволокна, используя асинхронные обработчики событий для переключения на соответствующее оптоволокно.

Волокно ожидания / ожидания просто означает, что оно не запланировано на данный момент - оно просто переключается на Вместо этого цикл событий.

Кстати, если вы ищете какой-то реальный код, взгляните на http://svn.cmeerw.net/src/nginetd/trunk/ , который все еще в работе , но пытается реализовать планировщик оптоволокна поверх многопоточного цикла событий (с портами завершения ввода-вывода Win32 или управляемым краем epoll).

0
ответ дан 4 December 2019 в 14:31
поделиться

Вероятно, вам следует взглянуть на семейство функций setcontext ( http://en.wikipedia.org/wiki/Setcontext ). Это будет означать, что в вашем приложении вам необходимо будет повторно реализовать все функции, которые могут блокировать (чтение, запись, спящий режим и т. Д.) В асинхронные формы и вернуться к планировщику.

Только «волокно планировщика» будет ждать на Завершение событий с использованием select (), poll () или epoll (). Это означает, что когда планировщик находится в режиме ожидания, процесс будет находиться в режиме ожидания в вызове select / poll / epoll и не будет загружать ЦП.

5
ответ дан 4 December 2019 в 14:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: