Node.js основан на модели программирования цикла событий. Цикл событий работает в одном потоке и многократно ждет событий, а затем запускает любые обработчики событий, подписанные на эти события. События могут быть, например,
Все это выполняется в одном потоке, и код JavaScript никогда не выполняется параллельно. Пока эти обработчики событий малы и ждут еще большего количества событий, все работает хорошо. Это позволяет нескольким запросам обрабатываться одновременно одним процессом Node.js.
(В то время как события происходят немного, под капотом немного магии. Некоторые из них связаны с параллельными рабочими потоками низкого уровня. )
В этом случае SQL происходит много событий (событий) между созданием запроса базы данных и получением его результатов в обратном вызове. За это время цикл событий продолжает накачивать жизнь в приложении и продвигать другие запросы по одному крошечному событию за раз. Поэтому несколько запросов подаются одновременно.
[/g1]
В соответствии с: «Контур события из 10 000 фут-ядра концепция за Node.js ".
Это f in FDICT
, а не f in FDICT.keys()
. Использование keys
создает список всех ключей и проходит через него один за другим, тогда как использование f in FDICT
использует эффективный поиск на основе хэша.
if f in FDICT.keys()
Поскольку вы генерируете список ключей каждый раз, когда вы петли.
Попробуйте заменить его на f in fDICT
Возможно, это связано с тем, что вы вызываете FDICT.keys():
, который должен создать список ключей. Вы хотите сделать f in FDICT:
, который имеет тот же результат, но не требует создания списка ключей.
В любом случае, я слышал, что обычный оптимизированный способ сделать это - предположить, что ключ находится в dict и просто улавливает KeyError
, если он не