Сообщение Re[17]: Для тех, кто смеется над JavaScript от 26.06.2020 11:47
Изменено 26.06.2020 11:54 Pauel
Re[17]: Для тех, кто смеется над JavaScript
Здравствуйте, Sharov, Вы писали:
I>>Я даже не представляю, каким образом это можно выявить. Недетерминизм можно ождать откуда угодно — внутренности нода, ос, драйверов, кеш, протокол работы с железом, шина, сам контроллер устройства
S>А вот надо представлять! Иначе какой в этом смысл? Разве будет недетреминизм, если мы в очередь поставили обращение к одному и тому же файлу -- чтение, запись? Мне кажется, все будет последовательно. Соотв. результат будет аналогичен await.
Ты продолжаешь теоретизировать. Запусти и сам увидишь, что никакого последовательного доступа нет. Каждый раз разные последовательности.
S>>>Причем здесь io, если в ноде принципиально отсутствует многопоточность?
I>>Нод — многопоточный! Это его основная фишка. Однопоточный только исполнитель джаваскрипта. Именно исполнитель, т.к. сам интерпретатор состоит из многих вещей, которые в т.ч. многопоточны, например, гц. Пока жээс инкрементит, унутре идут файловые операции.
S>Вот именно однопоточный исполнитель и будет инкрементировать переменную в памяти. Т.е. никаких rc в принципе. Acинхронный io да, сколько угодно.
Гонки есть в каждой виде многозадачности. Такой вот неприятный факт. И совсем неважно, какая она — синхронная многопоточная или асинхронная однопоточная.
Разница только в том, как именно выглядят эти гонки там и там.
Гонки возникают в том случае, когда хотя бы одна из операций в протоколе доступа к разделяемому ресурсу неатомарна. В нашем случае read и write не обеспечивают атомарность. Соотвенно из за параллелизма получаем, например, write одной задачи вмешивается в read другой задачи.
У тебя почему то задача == поток. Это крайне неверное утверждение.
I>>Я даже не представляю, каким образом это можно выявить. Недетерминизм можно ождать откуда угодно — внутренности нода, ос, драйверов, кеш, протокол работы с железом, шина, сам контроллер устройства
S>А вот надо представлять! Иначе какой в этом смысл? Разве будет недетреминизм, если мы в очередь поставили обращение к одному и тому же файлу -- чтение, запись? Мне кажется, все будет последовательно. Соотв. результат будет аналогичен await.
Ты продолжаешь теоретизировать. Запусти и сам увидишь, что никакого последовательного доступа нет. Каждый раз разные последовательности.
S>>>Причем здесь io, если в ноде принципиально отсутствует многопоточность?
I>>Нод — многопоточный! Это его основная фишка. Однопоточный только исполнитель джаваскрипта. Именно исполнитель, т.к. сам интерпретатор состоит из многих вещей, которые в т.ч. многопоточны, например, гц. Пока жээс инкрементит, унутре идут файловые операции.
S>Вот именно однопоточный исполнитель и будет инкрементировать переменную в памяти. Т.е. никаких rc в принципе. Acинхронный io да, сколько угодно.
Гонки есть в каждой виде многозадачности. Такой вот неприятный факт. И совсем неважно, какая она — синхронная многопоточная или асинхронная однопоточная.
Разница только в том, как именно выглядят эти гонки там и там.
Гонки возникают в том случае, когда хотя бы одна из операций в протоколе доступа к разделяемому ресурсу неатомарна. В нашем случае read и write не обеспечивают атомарность. Соотвенно из за параллелизма получаем, например, write одной задачи вмешивается в read другой задачи.
У тебя почему то задача == поток. Это крайне неверное утверждение.
Re[17]: Для тех, кто смеется над JavaScript
Здравствуйте, Sharov, Вы писали:
I>>Я даже не представляю, каким образом это можно выявить. Недетерминизм можно ождать откуда угодно — внутренности нода, ос, драйверов, кеш, протокол работы с железом, шина, сам контроллер устройства
S>А вот надо представлять! Иначе какой в этом смысл? Разве будет недетреминизм, если мы в очередь поставили обращение к одному и тому же файлу -- чтение, запись? Мне кажется, все будет последовательно. Соотв. результат будет аналогичен await.
Ты продолжаешь теоретизировать. Запусти и сам увидишь, что никакого последовательного доступа нет. Каждый раз разные последовательности.
Важно иметь гарантии серилизованого доступа. И тут важно знать природу этого механизма — кто серилизует. А вот природа недетерминизма как раз так не сильно интересует.
S>>>Причем здесь io, если в ноде принципиально отсутствует многопоточность?
I>>Нод — многопоточный! Это его основная фишка. Однопоточный только исполнитель джаваскрипта. Именно исполнитель, т.к. сам интерпретатор состоит из многих вещей, которые в т.ч. многопоточны, например, гц. Пока жээс инкрементит, унутре идут файловые операции.
S>Вот именно однопоточный исполнитель и будет инкрементировать переменную в памяти. Т.е. никаких rc в принципе. Acинхронный io да, сколько угодно.
Гонки есть в каждой виде многозадачности. Такой вот неприятный факт. И совсем неважно, какая она — синхронная многопоточная или асинхронная однопоточная, вытесняющая или кооперативная.
Разница только в том, как именно выглядят эти гонки там и там.
Гонки возникают в том случае, когда хотя бы одна из операций в протоколе доступа к разделяемому ресурсу неатомарна. В нашем случае read и write не обеспечивают атомарность. Соотвенно из за параллелизма получаем, например, write одной задачи вмешивается в read другой задачи.
У тебя почему то задача == поток. Это крайне неверное утверждение.
I>>Я даже не представляю, каким образом это можно выявить. Недетерминизм можно ождать откуда угодно — внутренности нода, ос, драйверов, кеш, протокол работы с железом, шина, сам контроллер устройства
S>А вот надо представлять! Иначе какой в этом смысл? Разве будет недетреминизм, если мы в очередь поставили обращение к одному и тому же файлу -- чтение, запись? Мне кажется, все будет последовательно. Соотв. результат будет аналогичен await.
Ты продолжаешь теоретизировать. Запусти и сам увидишь, что никакого последовательного доступа нет. Каждый раз разные последовательности.
Важно иметь гарантии серилизованого доступа. И тут важно знать природу этого механизма — кто серилизует. А вот природа недетерминизма как раз так не сильно интересует.
S>>>Причем здесь io, если в ноде принципиально отсутствует многопоточность?
I>>Нод — многопоточный! Это его основная фишка. Однопоточный только исполнитель джаваскрипта. Именно исполнитель, т.к. сам интерпретатор состоит из многих вещей, которые в т.ч. многопоточны, например, гц. Пока жээс инкрементит, унутре идут файловые операции.
S>Вот именно однопоточный исполнитель и будет инкрементировать переменную в памяти. Т.е. никаких rc в принципе. Acинхронный io да, сколько угодно.
Гонки есть в каждой виде многозадачности. Такой вот неприятный факт. И совсем неважно, какая она — синхронная многопоточная или асинхронная однопоточная, вытесняющая или кооперативная.
Разница только в том, как именно выглядят эти гонки там и там.
Гонки возникают в том случае, когда хотя бы одна из операций в протоколе доступа к разделяемому ресурсу неатомарна. В нашем случае read и write не обеспечивают атомарность. Соотвенно из за параллелизма получаем, например, write одной задачи вмешивается в read другой задачи.
У тебя почему то задача == поток. Это крайне неверное утверждение.