Комментарии 14
А почему у Вас в цикле i < 10, а в выводе id отсутствуют 5,6,7,8, но зато повторяются 0,1,2?
блджад. Для начала сообщение раз в 100 миллисекунд это супер редко, вы просто не нарвались. Запустите каждый поток синхронно просто писать, без таймаута. Это раз. Второе, если оно синхронизировано — это ужасно, это очередной раз убийство производительности в угоду возможности привлечь к работе малограмотных работников. Вместо адекватного инструмента синхронизации, тупо сделать всегда просто потому что так удобно.
+1 к замедлению и склонения к неграмотному подходу к программированию.
1) мы пробовали запускать 100 потоков с 10 миллисекунд задержкой, результат был тот же. Оставил так как есть просто для наглядности.
2) Прошу вас, напишите здесь другой инструмент синхронизации Node.JS потоков)
2) Прошу вас, напишите здесь другой инструмент синхронизации Node.JS потоков)
Вы думаете 10мс достаточно? А что если на простые запросы бд могут отвечать за 10-100 наносекунд, это для сравнения. Вывод уж явно не медленее будет. Чтобы понять какую задержку сделать, надо хотя бы первоночально провести бенчмарк и определить как же быстро выводится строка с текстом. А к примеру когда я тестирую многопоточность, вообще никакие задержки не использую ибо вносят они очень большие погрешности.
А с паузами в 10-100мс, многопоточность и не нужна вовсе.
А с паузами в 10-100мс, многопоточность и не нужна вовсе.
Специально ради вас проверил: 100 потоков, каждый while(true){ sendMessage()}. Файл всё так же не каша.
Хочется увидеть верстю с createWriteStream
При указанном способе параллельной записи в файл «каши» не будет и в .NET, т.к. все сообщения равной длины. Когда два потока одновременно дозаписывают данные в файл, данные будут просто записаны в один и тот же участок файла. Т.е. один поток перезапишет данные другого потока.
Можете попробовать посчитать общее количество записанных строк в файле. Если Node.JS выполняет какую-то I/O-синхронизацию, то 10 потоков, записывающих по 1000 строк, дадут ровно 10000 строк в файле. В противном случае строк будет меньше.
Или попробуйте в разных потоках писать сообщения разной длины.
Можете попробовать посчитать общее количество записанных строк в файле. Если Node.JS выполняет какую-то I/O-синхронизацию, то 10 потоков, записывающих по 1000 строк, дадут ровно 10000 строк в файле. В противном случае строк будет меньше.
Или попробуйте в разных потоках писать сообщения разной длины.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Играем с потоками в Node.JS 10.5.0