Khác biệt giữa bản sửa đổi của “Tác vụ (điện toán)”

Bách khoa toàn thư mở Wikipedia
Nội dung được xóa Nội dung được thêm vào
Tạo với bản dịch của trang “Task (computing)
(Không có sự khác biệt)

Phiên bản lúc 13:58, ngày 15 tháng 11 năm 2020

Một nhóm chủ đề mẫu (các hộp màu xanh lá cây) với các hàng đợi nhiệm vụ gồm các nhiệm vụ đang chờ (màu xanh lam) và các nhiệm vụ đã hoàn thành (màu vàng), theo nghĩa nhiệm vụ là "đơn vị công việc".

Trong khoa học máy tính, một task là một đơn vị thực thi (unit of execution) hoặc một đơn vị công việc (unit of work). Khái niệm task thường mang tính chất khá chung chung, vì đối tượng chính xác được hướng đến khi dùng khái niệm task thường là tiến trình (process), light-weight process, luồng (thread), bước (step), yêu cầu (request) hoặc yêu cầu truy vấn (query). Hình bên minh họa một hàng đợi (queue) được dùng cho các task sẽ thực thi (Task Queue, màu xanh trong hình), một thread pool (màu xanh) dành cho các luồng (thread) để thực thi các task đó và những task đã hoàn thành (completed tasks, màu vàng). Hình ảnh này mình họa cho khái niệm task là một đơn vị công việc.

Thuật ngữ

Với khái niệm "đơn vị thực thi" (unit of execution), trong một số hệ điều hành, task tương đương với một tiến trình (process). Trong thực thi không tương tác (batch processing), một task là một đơn vị thực thi trong một công việc,[1][2] với bản thân một task là một tiến trình. Thuật ngữ "multitasking" (đa nhiệm) được dùng để chỉ việc xử lý nhiều tác vụ cùng một lúc, dưới góc dộ xử lý tiến trình, đồng thời cũng để chỉ việc thực hiện nhiều tác vụ cùng lúc.

Với khái niệm "đơn vị công việc" (unit of work), trong một công việc (có nghĩa là "công việc một lần"), một task có thể tương đương với một bước duy nhất (bản thân bước đó, chứ không phải việc thực hiện nó), trong khi việc xử lý hàng loạt các task riêng lẻ có thể tương ứng với một bước xử lý một đơn vị trong batch, hoặc một bước xử lý tất cả các đơn vị trong batch. Trong các hệ thống trực tuyến (kết nối Internet), các task thường tương ứng với một yêu cầu (request) duy nhất (trong kiến trúc response-request) như một HTTP request và response, hoặc một câu lênh truy vấn (trong truy xuất thông tin), một giai đoạn hoặc toàn bộ quá trình xử lý của hệ thống.

Ví dụ

Trong ngôn ngữ lập trình Java, hai khái niệm đơn vị công việc và đơn vị thực thi được gộp chung khi làm việc trực tiếp với các thread (luồng), nhưng được phân biệt rõ ràng trong Executor framework:[3]

Khi làm việc trực tiếp với các thread, một thread sẽ hỗ trợ cả đơn vị công việc và cơ chế để thực thi chúng. Trong Executor framework, một đơn vị công việc và cơ chế thực thi (execution mechanism) được tách biệt với nhau. Từ "abstraction" là đơn vị công việc, và cũng được xem là một task

Thuật ngữ của IBM

Việc IBM sử dụng thuật ngữ "task" đã có ảnh hưởng lớn, mặc dù đã nhấn mạnh sự mơ hồ của thuật ngữ này. Trong thuật ngữ của IBM, task có nhiều định nghĩa cụ thể, bao gồm:[4]

  • Một đơn vị công việc đại diện cho một trong các bước trong một tiến trình.
  • Một đơn vị công việc được thực hiện bởi một thiết bị hoặc tiến trình.
  • Một tiến trình và các thủ tục để chạy tiến trình đó.
  • Một tập hợp các hành động được thiết kế để đạt được một kết quả cụ thể. Một task được thực hiện trên một tập hợp các mục tiêu trên một lịch trình cụ thể.
  • Một đơn vị tính toán. Trong một công việc song song, hai hoặc nhiều task đồng thời hoạt động cùng nhau thông qua truyền tin nhắn và chia sẻ bộ nhớ. Mặc dù một tác vụ thường được phân bổ cho mỗi bộ xử lý vật lý (physical processor) hoặc logic (logical processor), thuật ngữ "task" và "bộ xử lý" (processor) không thể hoán đổi cho nhau.
  • Một hoạt động có giá trị do người dùng khởi xướng và được thực hiện bằng phần mềm.

Đặc biệt trong z/OS, nó được định nghĩa chính xác là:[5]

  • "Trong môi trường đa chương (multiprogramming) hoặc đa xử lý (multiprocessing), một hoặc nhiều chuỗi lệnh (instructions) được chương trình điều khiển coi như là một phần của công việc được máy tính thực hiện."

Khái niệm "task" trong OS/360 thông qua z/OS gần tương đương với tiến trình nhẹ (light-weight process); các task trong một bước công việc (job step) chia sẻ cùng một địa chỉ trong bộ nhớ. Tuy nhiên, trong MVS/ESA thông qua z/OS, một task hoặc Service Request Block (SRB) (Khối Yêu cầu Dịch vụ) có thể có quyền truy cập vào các vùng địa chỉ khác thông qua danh sách truy cập của nó.

Nhân Linux

Thuật ngữ task được sử dụng trong nhân Linux (ít nhất là kể từ v2.6.13,[6] và ở các phiên bản sau và bao gồm v4.8[7]) để chỉ một đơn vị thực thi, đơn vị này có thể chia sẻ nhiều tài nguyên hệ thống với các task khác trên hệ thống. Tùy thuộc vào mức độ chia sẻ, một task có thể được coi là một chuỗi hoặc tiến trình thông thường. Các task được thực hiện bằng dùng clone() trong system call,[8] nơi người dùng có thể chỉ định mức chia sẻ tài nguyên mong muốn.

Lịch sử

Thuật ngữ task bắt đầu được sử dụng cho khái niệm đa chương (multiprogramming) vào đầu những năm 1960, như trong ví dụ này từ năm 1961: (Bản gốc tài liệu)

Lỗi: Không có văn bản được đưa cho dấu ngoặc kép (hoặc bằng dấu hiệu được sử dụng trong đối số thực tế cho một tham số không tên)

Thuật ngữ này được phổ biến với sự ra đời của OS/ 360 (công bố năm 1964), có tính năng Multiprogramming with a Fixed number of Tasks (MFT) (tạm dịch: Đa chương trình với một số nhiệm vụ cố định) và Multiprogramming with a Variable number of Tasks (MVT) (Tạm dịch: Đa chương trình với một số công việc thay đổi). Trong trường hợp này, các task được xác định bằng các tiến trình nhẹ (light-weight process), một công việc bao gồm một số task và các task con được phát sinh sau đó (sub-task hay child processes theo thuật ngữ hiện đại).

Ngày nay thuật ngữ "task" đang được sử dụng rất mơ hồ. Ví dụ: như chương trình Windows Task Manager trên hệ điều hành Windows, dùng để quản lý các tasks đang chạy trên hệ thống, trong khi chương trình Windows Task Scheduler lên lịch cho các chương trình để thực thi trong tương lai, công việc được gọi là job scheduler với phần mở rộng tập tin là .job . Ngược lại, thuật ngữ task queue (hàng đợi task) thường được sử dụng theo nghĩa "đơn vị công việc".

Xem thêm

  • Task parallelism
  • Task queue

Người giới thiệu

  1. ^ “What is task? - Definition from WhatIs.com”. WhatIs.com. Truy cập ngày 11 tháng 6 năm 2015.
  2. ^ “What are computer processes?”. liutilities.com. Truy cập ngày 11 tháng 6 năm 2015.
  3. ^ “Executors”. Truy cập ngày 15 tháng 11 năm 2020.
  4. ^ IBM Terminology: T
  5. ^ Glossary of z/OS terms and abbreviations: T
  6. ^ include/linux/sched.h. GitHub.com. Linus Torvalds. 29 tháng 8 năm 2005.
  7. ^ include/linux/sched.h. GitHub.com. Linus Torvalds. 3 tháng 10 năm 2016.
  8. ^ “clone, __clone2 - create a child process”. 17 tháng 7 năm 2016. Truy cập ngày 6 tháng 11 năm 2016.