Ответ
В стандарте POSIX (POSIX Threads, pthreads
) поток (thread) — это базовая единица выполнения внутри процесса. Процесс может состоять из одного или нескольких потоков, которые выполняются псевдо-параллельно или параллельно на многоядерных системах.
Ключевое отличие потоков от процессов заключается в разделении ресурсов.
Что потоки разделяют (общие ресурсы):
- Адресное пространство (сегменты кода, данных и куча)
- Открытые файлы и сокеты
- Идентификаторы пользователя и группы (UID, GID)
Что у каждого потока свое (уникальные ресурсы):
- Идентификатор потока (Thread ID)
- Счетчик команд (Program Counter)
- Набор регистров процессора
- Стек (для локальных переменных и адресов возврата)
- Состояние (running, ready, blocked)
Пример на C с использованием pthreads
:
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
// Функция, которая будет выполняться в новом потоке
void* thread_function(void* arg) {
printf("Я новый поток! Сплю 2 секунды...n");
sleep(2);
printf("Новый поток завершает работу.n");
return NULL;
}
int main() {
pthread_t thread_id;
printf("Основной поток: создаю новый поток.n");
// Создание нового потока, который выполнит thread_function
pthread_create(&thread_id, NULL, thread_function, NULL);
// Ожидание завершения созданного потока
pthread_join(thread_id, NULL);
printf("Основной поток: новый поток завершился, программа окончена.n");
return 0;
}
Такая модель позволяет эффективно выполнять задачи, требующие параллельной обработки данных, но накладывает на разработчика ответственность за синхронизацию доступа к общим ресурсам (с помощью мьютексов, семафоров и т.д.).