Sự khác biệt giữa tiến trình và luồng xử lý

Thread và Process, đây là những thuật ngữ mà bạn sẽ được nghe rất nhiều nếu theo học ngành công nghệ thông tin, và cần phải nắm rõ khi đi làm việc. Tuy nhiên, định nghĩa và sự khác nhau giữa chúng ra sao thì không phải ai cũng biết, bởi có thể chúng không nằm trong những kiến thức được nhà trường giảng dạy. Để hiểu được Thread là gì, có gì khác so với Process, bạn hãy tham khảo bài viết dưới đây nhé.

Process là gì?

Sự khác biệt giữa tiến trình và luồng xử lý

Process, hay tiến trình, là sự 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 khác được tạo bởi tiến trình chính được gọi là tiến trình con.

Hoạt động của bất kì tiến trình nào cũng được kiểm soát 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ả những thông tin quan trọng liên quan đến các tiến trình, chẳng hạn như: id tiến trình, ư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ư ready (sẵn sàng), running (đang chạy), blocked (bị chặn) và terminated (đã chấm dứt). Các trạng thái của tiến trình được sử dụng để theo dõi hoạt động của tiến trình đó ở thời điểm hiện tại.

Những hoạt động xen kẽ của các tiến trình giúp nâng cao tốc độ tính toán khi hoạt động I / O trong một tiến trình trùng lặp với hoạt động tính toán trong tiến trình khác.

Các thuộc tính của một tiến trình:

- Việc tạo mỗi tiến trình bao gồm các cuộc gọi hệ thống cho từng tiến trình riêng biệt.

- Một tiến trình là một thực thể thực thi bị 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ế IPC (Inter-process Communication, tức Giao tiếp giữa các tiến trình) để 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 đều có ngăn xếp và bộ nhớ heap, 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 chứa hợp lý trong một tiến trình. Nhân cấp phát 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ỏ 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 của cùng một tiến trình.

Luồng được triển khai theo ba cách khác nhau: luồng cấp nhân, luồng cấp người dùng, và luồng lai. Luồng có thể có ba trạng thái running (đang chạy), ready (sẵn sàng) và blocked (bị chặn); nó chỉ bao gồm 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, khiến tăng cường sự tương tranh (song song) do đó tốc độ cũng tăng lên.

Đa luồng cũng đi kèm với 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 như vậy.

Một luồng 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 chỉ định bởi mức độ ưu tiên của luồng.

Các thuộc tính của một luồng:

- Một cuộc gọi hệ thống có thể tạo nhiều hơn một luồng.

- Luồng chia sẻ dữ liệu và thông tin.

- 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ể đạt được bằng cách sử dụng bộ nhớ dùng chung.

- Thuộc tính cô lập của tiến trình làm tăng chi phí của nó về mặt tiêu thụ tài nguyên.

Sự khác biệt giữa tiến trình và luồng xử lý

So sánh Process với Thread

Ta có bảng so sánh những sự khác nhau cơ bản giữa Process (tiến trình) và Thread (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, ta 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 chứa 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 đơn vị thực thi bị cô lập trong khi luồng không bị cô lập và có chia sẻ bộ nhớ.

- Một luồng không thể tồn tại riêng biệt; nó được gắn liền với một tiến trình. Mặt khác, một tiến trình có thể tồn tại riêng lẻ.

- Tại thời điểm hết hạn của một luồng, ngăn xếp liên kết của nó có thể được phục hồi vì mỗi luồng có ngăn xếp riêng. Ngược lại, nếu một tiến trình chết, tất cả các luồng cũng sẽ chết bao gồm 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!