Ответ 1
"Процесс" четко определен; "работа" и "задача" неоднозначны.
По сути, работа/задание - это то, что делается, а процесс - как это делается, обычно антропоморфизированный тем, кто его выполняет. Работа является общей единицей работы и состоит из задач. На практике использование очень противоречиво, и часто "задача" == "процесс", хотя формально процесс выполняет задачу.
Процесс - это четко определенная концепция операционной системы, а также поток: процесс - это экземпляр программы, которая выполняется, и базовая единица ресурсов: процесс состоит из или "владеет" своим образом, контекстом выполнения, памятью., файлы и т.д.; этимологически процесс - это шаги, выполняемые процессом или. Процесс состоит из одного или нескольких потоков, которые являются единицей планирования и состоят из некоторого подмножества процесса (возможно, совместно используемого с другими потоками): контекст выполнения и, возможно, больше. Традиционно поток - это единица выполнения на процессоре (поток - это "то, что исполняется"), но с многоядерными процессорами и аппаратными потоками некоторое планирование выполняется даже на уровне одного ядра. Существуют различные виды процессов и потоков, и точное определение зависит от платформы.
Работа и задача сегодня расплывчаты, неоднозначны, особенно задача. А " работа " часто означает набор процессов, в то время как " задача " может означать процесс, нить, процесс или нить, или, отчетливо, единицу работы, проделанный с помощью процесса или потока.
Чтобы понять, насколько запутано именование, диспетчер задач Windows управляет (работает) процессами, а планировщик задач Windows планирует программы для выполнения в будущем, что традиционно называется планировщиком заданий, и использует расширение .job
!
Термин " работа " традиционно означает "часть работы" (в отличие от "занятия") и используется как таковой на производстве в фразе " производство работы ", что означает "производство на заказ", где оно противопоставляется партии. производство (много предметов одновременно, по одному шагу за раз) и поточное производство (много предметов одновременно, все шаги одновременно, по элементам). Обратите внимание, что эти различия стали размытыми в вычислениях, особенно в оксюморонном термине " пакетное задание ".
В вычислительной технике "задание" происходит из неинтерактивной обработки на мэйнфреймах, особенно в языке IBM Job Control Language для DOS/360 и OS/360 середины 1960-х годов, и формально означает "единицу работы для операционной системы", который состоит из шагов, каждый из которых представляет собой запрос на выполнение определенной программы. Ранние компьютеры в основном выполняли пакетную обработку (запуск одной и той же программы по многим входным данным), например, перепись или выставление счетов, и стандартным типом одноразового задания была компиляция программы из источника, которая затем могла обрабатывать пакеты данных. Позже партия стала применяться ко всем неинтерактивным вычислениям, будь то одноразовые или несколько элементов.
В оболочках Unix " задание " - это представление оболочек для группы процессов - набора процессов, которым всем можно послать сигнал - конкретно конвейер и его потомки; обратите внимание, что запуск сценария запускает задание точно так же, как в мэйнфреймах. Задание не выполняется до тех пор, пока процессы не завершатся, и задание может быть остановлено, возобновлено или прекращено, что соответствует приостановке, возобновлению или прекращению процессов. Таким образом, хотя формально работа отличается от группы процессов, это тонкое различие, и поэтому люди часто используют "работу" для обозначения "набора процессов".
Традиционные задания (и пакеты) имеют ограниченные входные данные и должны завершить обработку, успешно или нет. Напротив, при запуске сервера, такого как веб-сервер, ввод, такой как поток запросов, является неограниченным (формально codata). Это аналогично созданию потока, и процесс (или "задание") никогда не завершается, хотя его можно прекратить или "отменить". В заключении "работа сервера никогда не выполняется" (формально, статус выхода будет ОТМЕНЕН, а не ЗАВЕРШЕН/УСПЕХ).
Термин "шаг" имеет смысл для последовательных вычислений - один шаг следует за другим - но если у вас есть параллельные вычисления, у вас есть набор задач, которые не обязательно выполняются в определенном порядке, а не последовательность шагов. Термин "задача" был популяризирован в OS/360, которая включала "Мультипрограммирование с фиксированным числом задач (MFT)" и "Мультипрограммирование с переменным числом задач (MVT)", хотя в этом случае "задача" использовалась как синоним с "процессом" или "потоком", поскольку основной задачей является "выполнить эту программу" (таким образом, результирующий процесс/поток выполняет задачу), что, вероятно, является источником неоднозначности.
Формально " многозадачность " означает "одновременную работу над несколькими задачами", но на практике это означает, что операционная система (или виртуальная машина, или среда выполнения, или отдельный процесс) "выполняет несколько процессов/потоков одновременно".
Четкое различие между задачами как работой и процессом/потоками в том, как выполняется работа, дано в очереди задач, как на этой диаграмме пула потоков: существует (большая, потенциально неограниченная) очередь входящих задач (ожидающих), которые выполняются (небольшим, часто фиксированным) набором потоков, причем каждая задача выполняется одним потоком, и каждый поток выполняет одну задачу за раз: активные задачи соответствуют активным потокам. Конкретно рассмотрим многопоточный веб-сервер, где задачи "обслуживают этот запрос веб-страницы", и каждый поток извлекает (с диска или из памяти) или отображает веб-страницу (скажем, с помощью шаблона или PHP), а затем возвращает результат.
Как видно из этого последнего примера, часто бывает полезно отличать задачи от потоков или процессов, и в определенных контекстах "работа" и "задача" имеют конкретные значения, хотя в целом они неоднозначны.
Таким образом, яснее всего избегать использования "задания" или "задачи" и вместо этого ссылаться на "набор процессов", "процесс" или "поток", а серверы должны ссылаться на запросы (или запросы), а не на задачи.