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

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

С процессом связаны следующие свойства:

  • pid
  • pgid
  • uid
  • gid
  • environment
  • cwd
  • дескрипторы файлов
  • сигналы
  • статистическая информация
  • nice

Эти свойства описаны в файле /usr/include/sys/proc.h.

С нитью связаны следующие свойства:

  • стек
  • стратегия планирования
  • приоритет планирования
  • ожидающие сигналы
  • блокированные сигналы
  • данные нитей

Эти свойства определены в файле /usr/include/sys/thread.h.

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

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

В AIX добавлена функция f_fork(), предназначенная для быстрого порождения процесса. Эта функция особенно полезна в тех приложениях с несколькими нитями, в которых сразу за вызовом fork() вызывается exec(). Функция fork() работает относительно медленно, так как она вызывает несколько обработчиков для получения блокировок на все библиотеки, и лишь затем порождает дочерний процесс и позволяет ему запустить все необходимые обработчики для инициализации блокировок. Функция f_fork() не вызывает эти обработчики, сразу переходя к системному вызову kfork(). Примером приложений, в которых может использоваться функция f_fork(), являются Web-серверы.