Какие операции в узле являются потокобезопасными?

Я используюэтот подход хранить данные в глобальном массиве, размещающем http-сервер, где определенные запросы будут манипулировать глобальным массивом.

Я немного волнуюсь из-за проблем с многопоточностью при определенных операциях - главным образомpush а такжеsplice, Я представляю, если в одном запросе я итерирую по массиву и удаляю элементы на основе условия, в то время как в другом запросе я вызываю.push() в массиве, с которым у меня возникнут проблемы. Кто-нибудь может это подтвердить?

Я в основном пишу на C #, где даже простое приращение не является потокобезопасным (запуск 25 потоков, выполняющих i ++, не гарантирует, что i == 25 после того, как все сказано и сделано).

Update:

Я написал 5 примеров, чтобы продемонстрировать то, о чем я говорю. Тест 1 и Тест 3 работают нормально. Тест 2 завершается неудачей из-за ... того, что обычно называют проблемами потоков (независимо от того, являются ли они фактическими процессорами или нет) Тесты 4 и 5, когда они выполняются параллельно, похоже, работают (это означает, что у них нет проблем со столкновениями, таких как Тест 2).

http://pastebin.com/HcJHTDFY

Я использую ApacheBench для тестирования, делая 1000 параллельных запросов.

Это заставляет меня поверить, что Тест 1 и Тест 3 работают нормально, потому что nodejs не выполнит больше 1instance of the app.get('/test3'...) callback in parallel Функция JavaScript параллельно (блокировка?). Как только вы реализуете setInterval / setTimeout, он освобождает nodejs для выполнения другого экземпляра обратного вызова (неблокирующего?).

Я просто пытаюсь понять, какого чертаnon-blocking I/O model действительно значит. Означает ли это, что «можно сделать неблокирование с помощью setTimeout и setInterval, если вам нужна неблокировка, в противном случае мы будем блокировать запуск любых других функций внешнего уровня до тех пор, пока мы не исчерпаем функцию, которую мы»; на & quot ;? Я чувствую, что это необходимо знать, чтобы у меня не возникало проблем с мыслью, что я могу реализовать что-то вроде / test2 и быть в полной безопасности.

Также, если я пытаюсь быть неблокирующим с моими обратными вызовами, должен ли я действительно звонитьsetTimeout(code, 1)? Или есть лучший способ?

Ответы на вопрос(2)

Ваш ответ на вопрос