Task (computing)

최종 수정 2026.03.25

![A sample [thread pool (green boxes) with task queues of waiting tasks (blue) and completed tasks (yellow), in the sense of task as "unit of work".]]

컴퓨팅에서 태스크(task)는 실행의 단위 또는 작업의 단위이다. 이 용어는 모호하며, 보다 정확한 대체 용어로는 프로세스, 경량 프로세스, 스레드(실행 단위의 경우), 단계, 요청, 또는 쿼리(작업 단위의 경우) 등이 있다. 옆의 다이어그램에는 처리할 수신 작업 대기열과 완료된 발신 작업 대기열, 그리고 이 작업을 수행하는 스레드 풀이 있다. 작업 단위 자체 또는 작업을 수행하는 스레드 모두 "태스크"라고 불릴 수 있으며, 이들은 각각 요청/응답/스레드, 수신 태스크/완료된 태스크/스레드(그림에서와 같이), 또는 요청/응답/태스크로 지칭될 수 있다.

용어

"실행 단위"라는 의미에서, 일부 운영 체제에서는 태스크가 프로세스와 동의어이고, 다른 운영 체제에서는 스레드와 동의어이다. 비대화형 실행(일괄 처리)에서 태스크는 작업(job) 내의 실행 단위이며,[^1][^2] 태스크 자체는 일반적으로 프로세스이다. "멀티태스킹"이라는 용어는 주로 처리의 의미, 즉 여러 태스크가 동시에 실행되는 것을 가리키지만, 여러 태스크가 동시에 수행된다는 작업의 의미도 내포하고 있다.

"작업 단위"라는 의미에서, 작업(job, "일회성 업무"를 의미)에서 태스크는 하나의 단계(실행이 아닌 단계 자체)에 대응할 수 있으며, 일괄 처리에서 개별 태스크는 배치 내 단일 항목을 처리하는 하나의 단계, 또는 배치 내 모든 항목을 처리하는 하나의 단계에 대응할 수 있다. 온라인 시스템에서 태스크는 가장 일반적으로 단일 요청(요청-응답 아키텍처에서) 또는 쿼리(정보 검색에서)에 대응하며, 처리의 단일 단계이거나 시스템 전체의 처리를 의미한다.

예시

Java 프로그래밍 언어에서 이 두 가지 개념(작업 단위와 실행 단위)은 스레드를 직접 다룰 때는 혼용되지만, Executors 프레임워크에서는 명확히 구분된다:

IBM 용어

IBM의 이 용어 사용은 영향력이 컸으나, 이 용어의 모호성을 부각시키듯이 IBM 용어에서 "태스크"는 다음을 포함하여 수십 가지의 구체적인 의미를 가진다:[^4]

  • 프로세스의 단계 중 하나를 나타내는 작업 단위.
  • 장치나 프로세스가 수행해야 할 작업 단위.
  • 프로세스와 그 프로세스를 실행하는 절차.
  • 특정 결과를 달성하기 위해 설계된 일련의 동작. 태스크는 특정 일정에 따라 일련의 대상에 대해 수행된다.
  • 연산 단위. 병렬 작업에서 둘 이상의 동시 태스크가 메시지 전달과 공유 메모리를 통해 함께 동작한다. 하나의 물리적 또는 논리적 프로세서당 하나의 태스크를 할당하는 것이 일반적이지만, "태스크"와 "프로세서"라는 용어는 상호 교환할 수 없다.
  • 비즈니스 가치가 있고, 사용자에 의해 시작되며, 소프트웨어에 의해 수행되는 활동.

z/OS에서는 구체적으로 다음과 같이 정의된다:[^5]

  • "다중 프로그래밍 또는 다중 처리 환경에서, 제어 프로그램이 컴퓨터가 수행할 작업의 요소로 취급하는 하나 이상의 명령어 시퀀스."

OS/360에서 z/OS까지의 태스크라는 용어는 경량 프로세스와 대략적으로 동등하다; 작업 단계(job step) 내의 태스크들은 주소 공간을 공유한다. 그러나 MVS/ESA에서 z/OS까지는 태스크 또는 서비스 요청 블록(SRB)이 접근 목록을 통해 다른 주소 공간에 접근할 수 있다.

Linux 커널

태스크라는 용어는 Linux 커널에서(최소 v2.6.13부터,[^6] v4.8을 포함하여[^7]) 실행 단위를 가리키는 데 사용되며, 이 실행 단위는 시스템의 다른 태스크와 다양한 시스템 자원을 공유할 수 있다. 공유 수준에 따라 태스크는 전통적인 스레드 또는 프로세스로 간주될 수 있다. 태스크는 clone() 시스템 호출을 통해 생성되며,[^8] 사용자가 원하는 수준의 자원 공유를 지정할 수 있다.

역사

태스크라는 용어가 작업의 일부를 지칭하게 된 것은 1960년대 초 다중 프로그래밍 시대로 거슬러 올라가며, 다음은 1961년의 예시이다:

이 용어는 OS/360(1964년 발표)의 도입과 함께 대중화되었으며, OS/360은 고정 수의 태스크를 사용하는 다중 프로그래밍(MFT)과 가변 수의 태스크를 사용하는 다중 프로그래밍(MVT)을 특징으로 했다. 이 경우 태스크는 경량 프로세스와 동일시되었으며, 하나의 작업은 여러 태스크로 구성되었고, 이후에는 태스크가 하위 태스크(현대 용어로 자식 프로세스)를 가질 수 있게 되었다.

오늘날 "태스크"라는 용어는 매우 모호하게 사용된다. 예를 들어, Windows 작업 관리자는 (실행 중인) 프로세스를 관리하는 반면, Windows 작업 스케줄러는 향후 실행할 프로그램을 예약하는데, 이는 전통적으로 작업 스케줄러로 알려진 것이며 .job 확장자를 사용한다. 이와 대조적으로, "태스크 큐"라는 용어는 일반적으로 "작업 단위"의 의미로 사용된다.

같이 보기

  • 태스크 병렬처리
  • 태스크 큐

참고 문헌

[^1]: 태스크란 무엇인가? - WhatIs.com 정의

[^2]: 컴퓨터 프로세스란 무엇인가?

[^3]: cite book author-link = Joshua Bloch first = Joshua last = Bloch title = 이펙티브 자바 edition = 제3판 page=[https://books.google.com/books?id=BIpDDwAAQBAJ&dq=%22the+key+abstraction+is+the+unit

[^4]: IBM 용어집: [http://www-01.ibm.com/software/globalization/terminology/t.html T]

[^5]: [http://www-01.ibm.com/support/knowledgecenter/zosbasics/com.ibm.zglossary.doc/zglossary.html z/OS 용어 및 약어 용어집]: [http://www-01.ibm.com/support/knowledgecenter/zosbasics/com.ib

[^6]: cite web title = include/linux/sched.h website = GitHub.com publisher = Linus Torvalds date = 2005년 8월 29일 url = https://github.com/torvalds/linux/blob/v2.6.13/include/l

[^7]: cite web title = include/linux/sched.h website = GitHub.com publisher = Linus Torvalds date = 2016년 10월 3일 url = https://github.com/torvalds/linux/blob/v4.8/include/linu

[^8]: cite journal title = clone, __clone2 - 자식 프로세스 생성 journal = 리눅스 프로그래머 매뉴얼 url = http://man7.org/linux/man-pages/man2/clone.2.html date = 2016년 7월 17일 access-dat

[^9]: 전자 컴퓨터의 동시 다중 프로그래밍