Я нашел способ сфокусировать всех предыдущих братьев и сестер (напротив ~
), которые могут работать в зависимости от того, что вам нужно.
Допустим, у вас есть список ссылок и при падении на одном, все предыдущие должны стать красными. Вы можете сделать это следующим образом:
/* default link color is blue */
.parent a {
color: blue;
}
/* prev siblings should be red */
.parent:hover a {
color: red;
}
.parent a:hover,
.parent a:hover ~ a {
color: blue;
}
<div class="parent">
<a href="#">link</a>
<a href="#">link</a>
<a href="#">link</a>
<a href="#">link</a>
<a href="#">link</a>
</div>
Это довольно простая разница. В модели с общей памятью несколько рабочих процессов работают с одними и теми же данными. Это открывает множество проблем параллелизма, которые являются обычными для параллельного программирования.
Системы передачи сообщений заставляют рабочих общаться через систему обмена сообщениями. Сообщения разделяют всех, поэтому работники не могут изменять данные друг друга.
По аналогии, допустим, мы вместе работаем с командой над проектом. В одной модели мы все собрались за столом, на котором выложены все наши документы и данные. Мы можем общаться, только меняя вещи на столе. Мы должны быть осторожны, чтобы все не пытались оперировать одним и тем же фрагментом данных одновременно, иначе это запутается и все запутается.
В модели передачи сообщений мы все сидим за своими столами со своими собственный комплект бумаг. Когда мы хотим, мы можем передать документ кому-то еще в качестве «сообщения», и теперь этот работник может делать с ним все, что он хочет. У нас есть доступ только к тому, что находится перед нами, поэтому нам не нужно беспокоиться о том, что кто-то протянет руку и изменит одно из чисел, пока мы находимся в процессе их суммирования.
Хорошо, глупо. аналогия!
Общая память S/m требует к процессу связи для совместного использования некоторой переменной. Процессы как ожидалось для обмена информацией с помощью этих совместно используемых переменных. В схеме общей памяти ответственность за обеспечение коммуникации лежит на прикладных программистах. Операционная система только должна обеспечить общую память.
Модели передачи сообщений (например, Erlang) не имеют общего состояния; вся синхронизация и общение осуществляется путем обмена сообщениями. Модели совместно используемой памяти взаимодействуют посредством чтения / записи в блоки совместно используемой памяти, которые защищены семафорами или подобным образом.