Tiến trình là gì? Phân biệt điểm khác nhau giữa tiến trình và luồng
Mỗi ngày, ta đều trải qua những tiến trình nhỏ, từ việc học hỏi kiến thức mới, xây dựng mối quan hệ thân thiết, cho đến việc phát triển kỹ năng cá nhân và chạm tới những ước mơ lớn lao. Tiến trình không chỉ là quá trình tiến lên, mà còn chứa đựng những thử thách, những thất bại và những bài học quý giá. Bài học dưới đây của Trang tài liệu sẽ giúp bạn hiểu rõ về Tiến trình là gì? Phân biệt điểm khác nhau giữa tiến trình và luồng
Mục lục
Tiến trình là gì?
Khái niệm: Tiến trình là một chương trình đang hoạt động, tức là một chương trình đang được thực thi. Tiến trình không chỉ là code chương trình vì nó bao gồm program counter (bộ đếm chương trình), process stack, register, code chương trình, v.v… So với những điều này, code chương trình chỉ là phần văn bản.
Phân loại tiến trình
Init process
Init process là tiến trình đầu tiên được khởi động sau khi bạn lựa chọn hệ điều hành trong boot loader. Trong cây tiến trình, init process là tiến trình cha của các tiến trình khác. Init process có đặc điểm sau:
Parents process – Child process
Trong hệ điều hành linux các tiến trình được phân thành parents process và child process. Một tiến trình khi thực hiện lệnh fork() để tạo ra một tiến trình mới thì đưọc gọi là parents process. Tiến trình mới tạo được gọi là child process.
Một parents process có thể có nhiều child process nhưng một child process chỉ có một parents process. Khi quan sát thông tin của một tiến trình, ngoài PID (Processes ID) ta cần để ý tới PPID (Parent Processes ID).
Daemon Process
Một Daemon Process là một tiến trình chạy nền. Nó sẽ luôn trong trạng thái hoạt động và sẽ được kích hoạt bởi một điều kiện hoặc câu lệnh nào đó. Trong Unix, các daemon thường được kết thúc bằng “d” ví dụ như httpd, sshd, crond, mysqld,…
Chúng ta có thể chạy một đoạn script bash shell, python, java,… dưới dạng một daemon process bằng cách sử dụng dấu &
ví dụ:
./simpleshell.sh &
Tuy nhiên, vấn đề ở đây là khi ta kết thúc phiên của terminal, tiến trình đó sẽ không có tiến trình cha và sẽ trở thành một orphan process. Để giải quyết vấn đề này, ta sẽ cho shell chạy với tư cách là tiến trình con của init process bằng cách dùng lệnh nohup
như sau:
nohup ./simpleshell.sh &
Luồng là gì?
Luồng là một tiến trình gọn nhẹ có thể được quản lý độc lập bởi một bộ lập lịch. Nó cải thiện hiệu suất ứng dụng bằng cách sử dụng phương pháp xử lý song song. Một luồng chia sẻ thông tin như data segment (phân đoạn dữ liệu), code segment (phân đoạn code), file, v.v… với các luồng ngang hàng, đồng thời nó cũng chứa các register, ngăn xếp, bộ đếm của chính nó, v.v…
Phân biệt tiến trình và luồng
Dưới đây là bảng so sánh giữa tiến trình và luồng:
Tiêu chí | Tiến trình | Luồng |
---|---|---|
Định nghĩa | Một chương trình đang được thực thi, tức là một chương trình đang hoạt động. | Một tiến trình nhỏ gọn có thể được quản lý độc lập bởi một bộ lập lịch. |
Thời gian chuyển đổi ngữ cảnh | Tiến trình yêu cầu nhiều thời gian hơn để chuyển đổi ngữ cảnh vì chúng nặng hơn. | Luồng cần ít thời gian hơn để chuyển đổi ngữ cảnh vì chúng nhẹ hơn tiến trình. |
Chia sẻ bộ nhớ | Các tiến trình hoàn toàn độc lập và không chia sẻ bộ nhớ. | Một luồng có thể chia sẻ một số bộ nhớ với các luồng khác trong cùng một tiến trình. |
Giao tiếp | Giao tiếp giữa các tiến trình đòi hỏi nhiều thời gian hơn giữa các luồng. | Giao tiếp giữa các luồng yêu cầu ít thời gian hơn giữa các tiến trình. |
Khi bị chặn | Nếu một tiến trình bị chặn, các tiến trình khác vẫn có thể tiếp tục thực thi. | Nếu một luồng bị chặn, tất cả các luồng trong cùng một tiến trình đều bị chặn. |
Tiêu thụ tài nguyên | Tiến trình yêu cầu nhiều tài nguyên hơn luồng. | Luồng thường cần ít tài nguyên hơn các tiến trình. |
Sự phụ thuộc | Các tiến trình độc lập với nhau. | Luồng là các phần của một tiến trình và phụ thuộc vào nhau. |
Chia sẻ dữ liệu và code | Các tiến trình có dữ liệu và code segment độc lập. | Một luồng chia sẻ data segment, code segment, file, v.v… với các luồng khác trong cùng một tiến trình. |
Cách hệ điều hành nhìn nhận | Mỗi tiến trình được xem như một thực thể độc lập. | Tất cả các luồng trong cùng một tiến trình được coi như một tác vụ duy nhất. |
Thời gian tạo | Tiến trình đòi hỏi nhiều thời gian hơn để tạo. | Luồng yêu cầu ít thời gian hơn để tạo. |
Thời gian chấm dứt | Tiến trình yêu cầu nhiều thời gian hơn để chấm dứt. | Luồng cần ít thời gian hơn để kết thúc. |