Информация об изменениях

Сообщение Re[19]: Для тех, кто смеется над JavaScript от 19.06.2020 15:05

Изменено 19.06.2020 15:08 Pauel

Re[19]: Для тех, кто смеется над JavaScript
Здравствуйте, Мирный герцог, Вы писали:

I>>Ты хочешь увидеть частный случай — гонки из за многопоточности. Объект в другой воркер или даже поток можно передавать как по значению, так и по ссылке.


МГ>я хочу чтобы ты корректно использовал устоявшиеся термины — параллелизм, асинхронность, многопоточность, многозадачность, это всё разные термины, для разных (хотя иногда и пересекающихся) контекстов. То, о чём ты говоришь называется concurrency. И для таких как ты (толком не разбирающихся в теме, и потому использующие термины к месту и не очень) пишут специальные статьи: https://tproger.ru/explain/concurrency-vs-parallelism/


В итоге ты не нашел ошибки в коде, аргументировать разницу в терминах не смог, привел в качестве аргумента картинку из журнала Мурзилка Ты мог бы и не стараться, я и так понял, откуда у тебя термины.

Вот, навскидку:

1. многозадачность есть логическая и физическая. Логическая — как мы организуем. Физическая — как мы исполняем.

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

2. многопоточность — стратегия разделения физических ресурсов, т.е. конкретная реализация. Поток = вычислитель и связаные с ним ресурсы, ядро, регистры, стек, контекст. Вместо потока может быть и процесс, и другой комп, и что угодно другое.

Нюанс — нод он однопоточно-многопоточный

3. синхронный, асинхронный код — указывает, как логические задачи перекладываются на физические. Например, один поток выполняет одну задачу. Это синхронный код. А может и иначе — поток может выполнять то одну, то другую, то третью. Это асинхронный код.
Отсюда ясно, что может быть целых 4 варианта
синхронный однопоточный
синхронный многопоточный
асинхронный однопоточный
асинхронный многопоточный

Последовательный-конкурентный-параллельный — стратегия использования времени. Конкурентный, значит в единицу времени прогресс происходит со всеми задачами. Последовательный — только с одной. Параллельный — не просто прогресс, а именно выполнение в единицу времени.

Три нюанса
1 что считать прогрессом, инкремент или полный цикл доступа к ресурсу. Очевидно — полный цикл.
2 параллелизм возможен, о ужас, в однопоточном синхронном или однопоточным асинхронном варианте, см. выше!
3 часто, но не всегда, параллелизм есть способ реализации конкурентности

Проверяем — пока одна задача чего то там инкрементит, другие задачи или читают, или пишут. Следовательно, все в порядке.

Теперь гонки — это ситуация с неопределенной последовательностью доступа к разделяемому ресурсу. Причины разные — параллелизм, сеть, что угодно.

В данном случае одного только параллелизма недостаточно, чтобы обеспечить искомый результат. Очевидно — параллелизм приводит к гонкам, которые и наблюдаем.
Нужно ввести явную зависимость между задачами, а именно — одна задача может работать с ресурсом за раз. Тогда за одно и то же время только одна из задач выполняется. А это уже будет не параллельное, а конкурентное исполнение, т.к. прогресс в наличии тольку у одной задачи.

Всё, можешь пользоваться.
Re[19]: Для тех, кто смеется над JavaScript
Здравствуйте, Мирный герцог, Вы писали:

I>>Ты хочешь увидеть частный случай — гонки из за многопоточности. Объект в другой воркер или даже поток можно передавать как по значению, так и по ссылке.


МГ>я хочу чтобы ты корректно использовал устоявшиеся термины — параллелизм, асинхронность, многопоточность, многозадачность, это всё разные термины, для разных (хотя иногда и пересекающихся) контекстов. То, о чём ты говоришь называется concurrency. И для таких как ты (толком не разбирающихся в теме, и потому использующие термины к месту и не очень) пишут специальные статьи: https://tproger.ru/explain/concurrency-vs-parallelism/


В итоге ты не нашел ошибки в коде, аргументировать разницу в терминах не смог, привел в качестве аргумента картинку из журнала Мурзилка Ты мог бы и не стараться, я и так понял, откуда у тебя термины.

Вот, навскидку:

1. многозадачность есть логическая и физическая. Логическая — как мы организуем. Физическая — как мы исполняем.

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

2. многопоточность — стратегия разделения физических ресурсов, т.е. конкретная реализация. Поток = вычислитель и связаные с ним ресурсы, ядро, регистры, стек, контекст. Вместо потока может быть и процесс, и другой комп, и что угодно другое.

Нюанс — нод он однопоточно-многопоточный

3. синхронный, асинхронный код — указывает, как логические задачи перекладываются на физические. Например, один поток выполняет одну задачу. Это синхронный код. А может и иначе — поток может выполнять то одну, то другую, то третью. Это асинхронный код.
Отсюда ясно, что может быть целых 4 варианта
синхронный однопоточный
синхронный многопоточный
асинхронный однопоточный
асинхронный многопоточный

Последовательный-конкурентный-параллельный — стратегия использования времени. Конкурентный, значит в единицу времени прогресс происходит со всеми задачами. Последовательный — только с одной. Параллельный — не просто прогресс, а именно выполнение в единицу времени.

Три нюанса
1 что считать прогрессом, инкремент или полный цикл доступа к ресурсу. Очевидно — полный цикл.
2 параллелизм возможен, о ужас, в однопоточном синхронном или однопоточным асинхронном варианте, см. выше!
3 часто, но не всегда, параллелизм есть способ реализации конкурентности

Проверяем — пока одна задача чего то там инкрементит, другие задачи или читают, или пишут. Следовательно, все в порядке.

Теперь гонки — это ситуация с неопределенной последовательностью доступа к разделяемому ресурсу. Причины разные — параллелизм, сеть, что угодно.

В данном случае одного только параллелизма недостаточно, чтобы обеспечить искомый результат. Очевидно — параллелизм приводит к гонкам, которые и наблюдаем.
Нужно ввести явную зависимость между задачами, а именно — одна задача может работать с ресурсом за раз. Тогда за одно и то же время только одна из задач выполняется. А это уже будет не параллельное, а конкурентное исполнение, т.к. исполнение в наличии тольку у одной задачи, хотя прогресс есть у всех.

Всё, можешь пользоваться.