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