214 похожих чатов

Такой вопрос, зачем нужна синхронизация потоков, а конкретно зачем на

одну задачу посылать несколько потоков, везде пишут так быстрее и производительней, но в чем это заключается для каких задач это нужно? Просто по-сути получается так, что каждый раз просто к этой задаче подходит новый и новый поток(я представляю это в виде строителей, которые по очереди кладут кирпичи)

4 ответов

10 просмотров

С днем каши в голове! Во-первых, не потоки “посылаются” на задачу, а последовательность команд, определяющая задачу, направляется на тот или иной поток для собсна выполнения процессором. Во-вторых, направлять эту самую последовательность команд сразу на несколько потоков имеет смысл только в том случае, если в этом последовательности команд есть подпоследовательности, совсем или почти друг от друга не зависящие и которые благодаря этому могут быть исполнены параллельно. В противном случае, действительно, получится как в твоей аналогии со строителями и кирпичами. В третьих, задача синхронизации возникает только тогда, когда-таки подпоследовательности зависят друг от друга, обычно по данным. Тогда добавляют синхронизацию, чтобы в нужной мере гарантировать порядок выполнения подпоследовательностей.

!# ramazi- Автор вопроса
Nikita Provotorov
С днем каши в голове! Во-первых, не потоки “посыл...

так, я люблю бытовые примеры из твоих слов я понял следующее: у меня есть стол с 2-мя пустыми стаканами - некая критическая зона, есть два друга(сразу видно что пример вымышленный) - потоки и я охраняю воду - локер Задача наполнить эти стаканы водой и получается такая ситуация, каждый из друзей подходит ко мне, берет некоторое количество воды, бежит к стакану и наполняет допустим стакан номер 1,другой же друг берет у меня воду и наполняет стакан номер 2, и так вот по очереди, один друг работает с первым стаканом, а другой со вторым, но если бы стакан был бы 1, то смысла в этом всем не было бы, я верно понял?

!# ramazi
так, я люблю бытовые примеры из твоих слов я понял...

Ага, здесь как раз есть всю последовательность команд по взятию воды и наполнения ею двух стаканов можно разделить на две ПОЧТИ не зависящие друг от друга подпоследовательности команд “взять воду и наполнить первый стакан” и “взять воду и наполнить второй стакан”. Почти, потому что эти подпоследовательности зависят друг от друга на стадии взятия воды, как бы этим дружкам-пирожкам друг с другом не столкнуться или не раздолбать раздатчик воды. Если бы стакан был 1, то смысла бегать двум друзьям нет. А еще если бы раздатчиков было 2, то синхронизировать друзей тоже не нужно было бы.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта