предисловие
Добро пожаловать в публичный аккаунт:Программирование кодераПолучайте последние оригинальные технические статьи и соответствующие бесплатные учебные материалы и изучайте технические знания в любое время и в любом месте!
В этой главе в основном рассказывается о разнице между процессами и потоками, а также о связанных с ними точках знаний, а также об этом вопросе, который мы часто задаем в процессе собеседования. Я надеюсь, что благодаря этой статье вы сможете понять соответствующие моменты знаний ~
Включающие вопросы интервью:
- 1. В чем разница между процессом и потоком?
- 2. Каковы характеристики процессов и потоков?
- 3. Как взаимодействуют процессы?
- 4. Что такое переполнение буфера?
- 5. Как взаимодействуют процессы?
- 6. Как взаимодействуют потоки?
Из приведенных выше вопросов для интервью видно, что все они одинаковы, просто разные способы задавать вопросы.Пока мы можем понять основные моменты, мы можем легко ответить на любые вопросы, которые задает интервьюер!
1. Маленькие каштаны:
我们生活中有许许多多关于进程与线程的小栗子,比如:1.我们使用打开一个微信软件,这个时候就开启了一个进程,
当我们在微信里面进行各种操作(查看朋友圈,扫一扫...),这么多的操作就是线程。
所以我们可以说“进程”是包含“线程”的,“线程”是“进程”的一个子集。
Источник Энциклопедия Baidu:
ПроцессЭто работающая программа на компьютере с набором данных, базовая единица распределения ресурсов и планирования в системе, а также основа структуры операционной системы. В современных компьютерных архитектурах с поточно-ориентированным дизайном процессы являются контейнерами для потоков. Программа — это описание инструкций, данных и их организации, а процесс — сущность программы. Это работающая программа на компьютере с набором данных, базовая единица распределения ресурсов и планирования в системе, а также основа структуры операционной системы. Программа — это описание инструкций, данных и их организации, а процесс — сущность программы.
нитьЭто наименьшая единица, которую операционная система может выполнять для планирования операций. Он содержится в процессе и является фактическим операционным блоком в процессе. Поток относится к одному последовательному потоку управления в процессе.Процесс может иметь несколько потоков одновременно, и каждый поток выполняет разные задачи параллельно.
Кратко резюмируем:
Процесс: относится к прикладной программе, работающей в системе; после запуска программа становится процессом; процесс — наименьшая единица распределения ресурсов.
Поток: основная единица, с помощью которой система распределяет ресурсы процессорного времени, или поток выполнения единицы, который выполняется независимо внутри процесса. Поток — наименьшая единица выполнения программы.
2. Глубокое понимание:
2.1 Процесс (поток + память + дескриптор файла/сети)
Давайте дальше разберемся с картинкой выше:
"ОЗУ":Память, которую мы обычно понимаем, — это физическая память, которую мы видим (2G/4G/8G/16G), почему она в процессе? На самом деле память здесь логическая память. Относится к адресному пространству памяти. Память каждого процесса независима друг от друга. В противном случае будет проблема: мы меняем значение указателя, чтобы он указывал на память других процессов, чтобы мы могли видеть информацию «WeChat» или «Онлайн-банкинга» в других процессах, В этом случае записи нашего чата WeChat или информация о банковском счете будут обнаружены другими, что является очень опасным сигналом! Очевидно, что это невозможно.
"дескриптор файла/сети":Они являются общими для всех процессов, например, открытие одного и того же файла и захват портов в одной сети разрешены.
"нить":Далее мы представим наши знания, связанные с «потоком».
2.2 Поток (стек+ПК+TLS)
2.2.1 Стек:
Мы обычно говорим о стеке вызовов, на самом деле куча здесь не имеет значения, стек вызовов — это смысл стека вызовов. Итак, что у нас в стеке? Мы продолжим делать вызовы функций из входной основной функции основного потока, При каждом вызове все параметры и адреса возврата помещаются в стек.
2.2.2 ПК:
Счетчик программ Счетчик программ, на самом деле операционная система запускает поток, И наш процесс — это всего лишь его контейнер. ПК указывает на текущую инструкцию, и эта инструкция помещается в память. Каждый поток имеет строку собственных указателей на указатели на память, в которой он находится в данный момент. Подавляющее большинство компьютеров представляют собой хранимые программы, а это означает, что наши данные и программы хранятся в одном и том же фрагменте памяти. Эта память содержит как наши переменные данных, так и нашу программу. Итак, наш указатель ПК указывает на нашу память.
2.2.2.1 Переполнение буфера
Например, мы часто слышим об уязвимости:переполнение буфераЧто это означает? Например: У нас есть место для ввода имени пользователя, которое изначально использовалось для хранения данных. Затем хакер особенно долго вводил данные. Эта длина превышает область памяти, которую мы храним для данных, и в это время она достигла часть памяти, которую мы выделили программе. Таким образом, хакер может скопировать код, который он хочет запустить. Напишите его в поле имени пользователя, чтобы имплантировать его. Наше решение состоит в том, чтобы ограничить длину имени пользователя не более чем Размер буфера имени пользователя для разрешения.
2.3 TLS:
Полное имя: локальное хранилище потока Ранее мы видели, что у каждого процесса есть своя независимая память.Тогда мы подумали, а есть ли у нашего потока независимая память?Ответ: да, это TLS. Может использоваться для хранения данных, уникальных для нашего потока. Видно, что поток — это то, что реально запускает наша операционная система, а процесс, как контейнер, собирает воедино что-то, что ему нужно, и изолирует то, что не нужно.
3. Как взаимодействуют процессы?
Реализовано через порт TCP/IP
在后续的文章中我们将一一详细介绍!
4. Как взаимодействуют потоки?
Обмен потоками относительно прост. Существует большой кусок общей памяти. Пока у всех один и тот же указатель, они могут видеть свою собственную память.
在后续的文章中我们将一一详细介绍!
5. Резюме:
1. Процессу нужно выделить большую часть памяти, а потоку нужно выделить только часть стека. 2. В программе есть хотя бы один процесс, а в процессе есть хотя бы один поток. 3. Процесс — это наименьшая единица распределения ресурсов, а поток — наименьшая единица выполнения программы. 4. Поток может создавать и отменять другой поток, а несколько потоков в одном процессе могут выполняться одновременно.
конец статьи
В этой главе представлены различия и связь между процессами и потоками, а также другие небольшие точки знаний, которые также являются точками содержания, которые появятся в процессе интервью. Это включает в себя множество небольших знаний, которые мы не стали объяснять, они будут более подробно описаны в следующих статьях. Добро пожаловать в публичный аккаунт:Программирование кодераПолучайте последние оригинальные технические статьи и соответствующие бесплатные учебные материалы и изучайте технические знания в любое время и в любом месте!
Добро пожаловать, чтобы следовать и Satr ~