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

Сообщение Про варианты многопоточного взаимодействия... от 18.10.2023 21:24

Изменено 18.10.2023 21:24 Shmj

Про варианты многопоточного взаимодействия...
1. Вот есть стандартное решение — типа как в С++. Вы запускаете поток и как бы просто программа раздвоилась. Теперь нужно помнить, что к одной и той же переменной могут одновременно получит доступ два разных потока — как-то синхронизировать эти доступы, учитывать это.

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

2. А ведь есть и иные решения — типа как в Dart. Доступ к переменным всегда из одного потока — нет возможности раздвоить как в C++. Т.е. ты можешь не беспокоиться о том, что кто-то левый изменит переменную и произойдет конфликт. 100% гарантия безопасности.

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

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

Какой подход вам кажется более удобным и почему?
Про варианты многопоточного взаимодействия...
1. Вот есть стандартное решение — типа как в С++. Вы запускаете поток и как бы просто исполнение раздвоилась. Теперь нужно помнить, что к одной и той же переменной могут одновременно получит доступ два разных потока — как-то синхронизировать эти доступы, учитывать это.

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

2. А ведь есть и иные решения — типа как в Dart. Доступ к переменным всегда из одного потока — нет возможности раздвоить как в C++. Т.е. ты можешь не беспокоиться о том, что кто-то левый изменит переменную и произойдет конфликт. 100% гарантия безопасности.

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

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

Какой подход вам кажется более удобным и почему?