Задача (вычисления)

В вычислениях задача — это единица выполнения или единица работы. Этот термин неоднозначен; Точные альтернативные термины включают процесс , облегченный процесс , поток (для выполнения), шаг , запрос или запрос (для работы). На соседней диаграмме показаны очереди входящей и исходящей завершенной работы, а также пул потоков для выполнения этой работы. Либо сами рабочие единицы, либо потоки, выполняющие работу, могут называться «задачами», и их можно называть соответственно запросами/ответами/потоками, входящими задачами/завершенными задачами/потоками (как показано) или запросами/ ответы/задачи.
Терминология [ править ]
В смысле «единицы выполнения» в некоторых операционных системах задача является синонимом процесса. [ нужна ссылка ] , а в других с резьбой [ нужна ссылка ] . При неинтерактивном выполнении ( пакетной обработке ) задача — это единица выполнения внутри задания . [1] [2] сама задача обычно представляет собой процесс. Термин « многозадачность » в первую очередь относится к смыслу обработки — выполнению одновременному нескольких задач — но имеет нюансы рабочего смысла, когда несколько задач выполняются одновременно.
В смысле «единицы работы» в задании (что означает «разовая часть работы») задача может соответствовать одному шагу (сам шаг, а не его выполнение), тогда как при пакетной обработке отдельные задачи могут соответствуют одному шагу обработки одного элемента в пакете или одному шагу обработки всех элементов в пакете. В онлайн-системах задачи чаще всего соответствуют одному запросу (в архитектурах запрос-ответ ) или запросу (при поиске информации ), либо одному этапу обработки, либо всей общесистемной обработке.
Примеры [ править ]
В языке программирования Java эти два понятия (единица работы и единица выполнения) объединяются при работе непосредственно с потоками, но четко различаются в структуре Executors :
Когда вы работаете непосредственно с потоками,
Thread
служит одновременно единицей работы и механизмом ее выполнения. В структуре исполнителя единица работы и механизм выполнения разделены. Ключевой абстракцией является единица работы, которая называется задачей . [3]
Терминология IBM [ править ]
Использование этого термина в IBM оказало большое влияние, хотя и подчеркивает двусмысленность этого термина. В терминологии IBM «задача» имеет десятки конкретных значений, в том числе: [4]
- Единица работы, представляющая один из этапов процесса.
- Единица работы, которую должно выполнить устройство или процесс.
- Процесс и процедуры, которые его запускают.
- Совокупность действий, направленных на достижение определенного результата. Задача выполняется по набору целей по определенному графику.
- Единица вычислений. В параллельном задании две или более одновременных задач работают вместе посредством передачи сообщений и общей памяти. Хотя принято выделять одну задачу на физический или логический процессор, термины «задача» и «процессор» не являются взаимозаменяемыми.
- Действие, имеющее коммерческую ценность, инициируемое пользователем и выполняемое программным обеспечением.
В частности, в z/OS оно определяется именно так: [5]
- «В мультипрограммной или мультипроцессорной среде одна или несколько последовательностей инструкций, рассматриваемых управляющей программой как элемент работы, которую должен выполнить компьютер».
Термин «задача» в OS/360–z/OS примерно эквивалентен облегченному процессу; задачи на этапе задания совместно используют одно адресное пространство. Однако в MVS/ESA через z/OS задача или блок запроса на обслуживание (SRB) может иметь доступ к другим адресным пространствам через свой список доступа.
Ядро Linux [ править ]
Термин задача используется в ядре Linux (по крайней мере, начиная с версии 2.6.13). [6] до версии 4.8 включительно [7] ) для обозначения исполнительной единицы, которая может совместно использовать различные системные ресурсы с другими задачами в системе. В зависимости от уровня совместного использования задачу можно рассматривать как обычный поток или процесс . Задачи создаются с помощью clone()
системный вызов, [8] где пользователь может указать желаемый уровень совместного использования ресурсов.
История [ править ]
Термин «задача» для части работы восходит к мультипрограммированию в начале 1960-х годов, как в этом примере 1961 года:
Серийная модель имеет возможность обрабатывать задачи одного задания независимо, аналогично функционированию IBM 709 . [9]
Этот термин стал популяризирован с появлением OS / 360 (анонсировано в 1964 году), в котором использовались мультипрограммирование с фиксированным числом задач (MFT) и мультипрограммирование с переменным числом задач (MVT). В этом случае задачи отождествлялись с облегченными процессами, задание состояло из ряда задач, а в дальнейшем задачи могли иметь подзадачи (в современной терминологии — дочерние процессы ).
Сегодня термин «задача» используется весьма неоднозначно. Например, диспетчер задач Windows управляет (запущенными) процессами , а планировщик задач Windows планирует выполнение программ в будущем (так называемый планировщик заданий ) и использует .job
расширение. Напротив, термин « очередь задач » обычно используется в смысле «единиц работы».
См. также [ править ]
Ссылки [ править ]
- ^ «Что такое задача? — Определение с сайта WhatIs.com» . WhatIs.com . Проверено 11 июня 2015 г.
- ^ «Что такое компьютерные процессы?» . liutilities.com . Проверено 11 июня 2015 г.
- ^ Блох, Джошуа . Эффективная Java (Третье изд.). п. п. 272 , пункт 68.
- ^ Терминология IBM: T
- ^ Глоссарий терминов и сокращений z/OS : T
- ^ "
include/linux/sched.h
» . GitHub.com . Линус Торвальдс. 29 августа 2005 г. - ^ "
include/linux/sched.h
» . GitHub.com . Линус Торвальдс. 3 октября 2016 г. - ^ «clone, __clone2 — создать дочерний процесс» . Руководство программиста Linux . 17 июля 2016 г. Проверено 6 ноября 2016 г.
- ^ Джеймс Ларримор МакКенни (1961). Одновременное мультипрограммирование электронных вычислительных машин . п. 154 .