Sự khác biệt giữa Process và Thread là gì?

2 min read

Để hiểu rõ hơn về câu hỏi trên, trước tiên chúng ta hãy tìm hiểu xem chương trình(program) là gì? Một chương trình là một tệp(file) thực thi chứa một tập hợp các hướng dẫn(instructions) và được lưu trữ động trên ổ đĩa. Một chương trình có thể có nhiều tiến trình(processes). Ví dụ, trình duyệt Chrome tạo một tiến trình(process) khác nhau cho mỗi tab được mở.

Khái niệm

Một tiến trình(process) có nghĩa là một chương trình đang được thực thi. Khi một chương trình được nạp(loaded) vào trong bộ nhớ và bắt đầu hoạt động thì chương trình đó sẽ trở thành một tiến trình. Một tiến trình yêu cầu một số tài nguyên thiết yếu như thanh ghi(registers), bộ đếm(program counter), và ngăn xếp(stack).

Một luồng(thread) là đơn vị thực thi nhỏ nhất trong một tiến trình.

Mối quan hệ

Quá trình dưới đây giải thích mối quan hệ giữa chương trình, tiến trình và thread.

Program vs Process vs Thread
  1. Chương trình chứa 1 tập các instruction.
  2. Chương trình được nạp vào bộ nhớ, nó trở thành một hoặc nhiều tiến trình đang chạy.
  3. Khi một tiến trình bắt đầu, nó được gán bộ nhớ và tài nguyên cần thiết. Một tiến trình(process) có thể có 1 hoặc nhiều luồng(thread). Ví dụ: trong ứng dụng Microsoft Word, một luồng có thể chịu trách nhiệm kiểm tra chính tả và một luồng khác để chèn văn bản vào tài liệu.

Sự khác biệt chính giữa tiến trình(process) và luồng(thread)

  • Các tiến trình thường độc lập, trong khi các luồng tồn tại dưới dạng tập hợp con của một tiến trình.
  • Mỗi tiến trình có không gian bộ nhớ riêng. Các luồng thuộc cùng một tiến trình sẽ chia sẻ cùng một bộ nhớ. Vì vậy khi lập trình đa luồng thì cần lưu ý xử lý vấn đề xung đột bộ nhớ.
  • Một tiến trình là một hoạt động nặng(heavyweight), nó cần nhiều thời gian để tạo và chấm dứt(terminal).
  • Chuyển đổi ngữ cảnh thì tốn kém hơn giữa các tiến trình.
  • Giao tiếp giữa các luồng thì nhanh hơn.

Nguồn: bytebytego

Avatar photo

One Reply to “Sự khác biệt giữa Process và Thread là gì?”

Leave a Reply

Your email address will not be published. Required fields are marked *