Основы

Когда перед вами стоит лектор и болтает о некоей неведомой теореме, действительной только для N мерных пространств, глаза начинают сразу слипаться и рука тянется подавить зевок, поэтому начну с простых и ясных аналогий.

Процесс это дом

Представим, что процесс это дом, просто некий контейнер с определенными заданными атрибутами( как например размел пола, высота стен, наличие лестницы).

Дом сам по себе объект пассивный, он не может ничего делать, просто стоит себе и стоит, и это отлично подходит под определение круга задач процесса.

Треды это жители

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

Single Threaded

Представьте, что вы переехали в свою собственную квартиру или просто съехали от родителей на съемное жилье в гордом одиночестве. Это именно об этом, где хочу хожу, носки по всей квартире, зубная щетка в унитазе, с ногами на столе, приставка, игры и т.д. Вы король и бог в этом пространстве. Все ресурсы принадлежат одному треду.

MultiThreaded

В лучшем случае к вам приехал друг на погостить, и это значит, что встав однажды утром с постели можно не попасть в ванную, потому что она будет закрыта. Ситуация пожестче это если вы съехались с вашей подругой и теперь везде типо порядок и раскиданы баночки с гелями и мазями, лаком для ногтей и всякой такой ерундой, носки в стирке, а по телевизору идет Animal Planet вместо крепкого орешка. В ванную попасть сложно как никогда, а зависнуть там на книжку почитать невозможно по причине постоянных воплей: "ты там заснул что ли"?

Но самая хорошая в данном случае аналогия(читай понимание ситуации) - это хостел. Представьте себе очередь в ванную из тапочек и полотенец в один туалет на 10 жильцов.

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

Процессы и треды

Возвращаясь к процессам и тредам, как дом занимает некоторую площадь земли под собой, так и процесс забирает у системы некое кол-во памяти для себя.

Жильцы могут ходить во все комнаты и трогать все, что плохо лежит, то же самое и с тредами, у них у всех есть доступ к любым ресурсам в рамках выделенной памяти для процесса.

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

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

На этом закончу вводную часть, в следующей расскажу о вариантах синхронизации и выделения прав тредам( семафоры, мютексы и т.д.)