Thread và Process là những thuật ngữ quen thuộc trong lĩnh vực công nghệ thông tin mà bạn sẽ thường nghe khi học và làm việc. Tuy nhiên, không phải ai cũng hiểu rõ về định nghĩa và sự khác biệt giữa chúng. Hãy đọc bài viết dưới đây để hiểu rõ hơn về Thread và Process.
Process là gì?
Process, hay tiến trình, là quá trình thực thi của một chương trình và thực hiện các hành động liên quan được chỉ định trong một chương trình, hoặc nó là một đơn vị thực thi nơi chương trình chạy. Hệ điều hành tạo, lên lịch và chấm dứt các tiến trình. Các tiến trình con được tạo bởi tiến trình chính được gọi là tiến trình con.
Mọi hoạt động của một tiến trình đều được điều khiển bởi khối điều khiển tiến trình (Process Control Block, viết tắt là PCB). PCB chứa tất cả thông tin quan trọng về tiến trình như: id, ưu tiên, trạng thái, CPU, …
Vòng đời của một tiến trình có một số trạng thái nhất định như sẵn sàng, đang chạy, bị chặn và đã chấm dứt. Các trạng thái này được sử dụng để theo dõi hoạt động của tiến trình tại thời điểm hiện tại.
Các hoạt động xen kẽ của các tiến trình giúp cải thiện tốc độ tính toán khi hoạt động I/O trong một tiến trình kết hợp với hoạt động tính toán trong tiến trình khác.
Các đặc điểm của một tiến trình:
- Mỗi tiến trình được tạo ra đều yêu cầu các cuộc gọi hệ thống riêng biệt.
- Một tiến trình là một thực thể thực thi được cô lập và không chia sẻ dữ liệu và thông tin.
- Các tiến trình sử dụng cơ chế Giao tiếp giữa các tiến trình (IPC) để liên lạc, làm tăng đáng kể số lượng cuộc gọi hệ thống.
- Quản lý tiến trình tiêu thụ nhiều cuộc gọi hệ thống hơn.
- Mỗi tiến trình có một ngăn xếp và bộ nhớ heap, cùng với dữ liệu và bản đồ bộ nhớ riêng.
Thread là gì?
Thread, hay luồng, là một tiến trình nhỏ có thể được quản lý độc lập bởi một bộ lập lịch. Tất cả các luồng trong một chương trình đơn được tổ chức hợp lý trong một tiến trình. Hệ điều hành cung cấp một ngăn xếp và khối điều khiển luồng (TCB) cho mỗi luồng. Hệ điều hành chỉ lưu con trỏ của ngăn xếp và trạng thái CPU tại thời điểm chuyển đổi giữa các luồng trong cùng một tiến trình.
Luồng có ba cách triển khai khác nhau: luồng cấp nhân, luồng cấp người dùng và luồng lai. Luồng có ba trạng thái: đang chạy, sẵn sàng và bị chặn; chỉ có trạng thái tính toán không phân bổ tài nguyên và trạng thái giao tiếp làm giảm chi phí chuyển đổi, tăng cường sự tương tranh (song song) và cải thiện tốc độ tính toán.
Đa luồng cũng mang theo nhiều vấn đề. Việc có nhiều luồng không tạo ra sự phức tạp, nhưng sự tương tác giữa chúng thì không dễ dàng như vậy.
Một luồng cần phải có thuộc tính ưu tiên khi có nhiều luồng đang hoạt động. Thời gian để nó thực thi tương ứng với các luồng đang hoạt động khác trong cùng tiến trình được quy định bởi mức độ ưu tiên của luồng.
Các đặc điểm của một luồng:
- Một cuộc gọi hệ thống có thể tạo ra nhiều hơn một luồng.
- Luồng có khả năng chia sẻ dữ liệu và thông tin với nhau.
- Luồng chia sẻ bộ nhớ heap nhưng có ngăn xếp và thanh ghi riêng của mình.
- Quản lý luồng không tiêu thụ hoặc tiêu thụ ít cuộc gọi hệ thống hơn vì giao tiếp giữa các luồng có thể thực hiện thông qua bộ nhớ dùng chung.
- Tính cô lập của tiến trình làm tăng chi phí về mặt tài nguyên của nó.
So sánh Tiến trình và Luồng
Bảng so sánh những khác biệt cơ bản giữa Tiến trình và Luồng như sau:
Cơ sở so sánh | Process (tiến trình) |
Thread (luồng) |
Định nghĩa |
Là chương trình đang thực thi |
Là một tiến trình nhỏ |
Chia sẻ bộ nhớ |
Hoàn toàn cô lập và không chia sẻ bộ nhớ |
Chia sẻ bộ nhớ với nhau |
Chia sẻ dữ liệu và mã |
Dữ liệu và đoạn mã độc lập |
Chia sẻ phân đoạn dữ liệu, phân đoạn mã, tệp, … với các luồng ngang hàng |
Tiêu thụ tài nguyên |
Nhiều hơn |
Ít hơn |
Thời gian cần thiết để tạo |
Nhiều hơn |
Ít hơn |
Thời gian cần thiết để chấm dứt |
Nhiều hơn |
Ít hơn |
Thời gian chuyển đổi bối cảnh |
Nhiều hơn |
Ít hơn |
Hiệu quả về giao tiếp |
Thấp hơn |
Cao hơn |
Hoạt động khi bị chặn |
Nếu một tiến trình bị chặn, các tiến trình còn lại vẫn có thể tiếp tục thực thi |
Nếu một luồng cấp người dùng bị chặn, tất cả các luồng ngang hàng của nó cũng bị chặn |
Chấm dứt không ổn định |
Tiến trình bị mất |
Luồng có thể được phục hồi |
Tóm lại, có thể tổng kết những điểm khác biệt quan trọng nhất như sau:
- Tất cả các luồng của một chương trình được tổ chức một cách hợp lý trong một tiến trình.
- Luồng nhẹ hơn Tiến trình.
- Một Tiến trình là một thực thể thực thi cô lập trong khi Luồng không cô lập và có chia sẻ bộ nhớ.
- Một Luồng không thể tồn tại độc lập; nó luôn liên kết với một Tiến trình. Mặt khác, một Tiến trình có thể tồn tại độc lập.
- Khi một Luồng kết thúc, ngăn xếp của nó có thể được giải phóng vì mỗi Luồng đều có ngăn xếp riêng. Trái lại, nếu một Tiến trình chết, tất cả các Luồng trong đó cũng sẽ kết thúc kể cả Tiến trình đó.
Qua bài viết này, bạn đã hiểu được Process và Thread là gì, cũng như sự khác nhau giữa chúng rồi phải không? Hi vọng những thông tin vừa chia sẻ ở trên sẽ giúp ích cho bạn!