В чем разница между потоком и процессом?

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

Для того чтобы начать погружаться в эту тему, очень важно понимать как именно устроена работа приложения внутри в контексте потоков.

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

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

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

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

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

Каждый поток при желании может порождать другой поток. У разработчика имеется возможность создать и запустить поток из другого потока.

Понравилась статья? Поделиться с друзьями:
Комментарии: 5
  1. msfvenom (автор)

    Не стесняйтесь комментировать, если вам понравилась статья ;-)

  2. Alex

    Отличная статья :)

  3. Alice Stewart

    :idea:

  4. Almas

    :idea:

  5. Muхauл

    :!: :cool:

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: