Sự khác nhau giữa Process và Thread

17 tháng 10, năm ngoái – 11076 lượt xem

Sự khác nhau giữa Process và Thread

Process và Thread

Process là quy trình hoạt động giải trí của một ứng dụng. Điều đó nghĩa là gì ? Có thể lấy một ví dụ như sau, khi bạn click đúp chuột vào hình tượng MS Word, một process chạy ứng dụng Word được khởi tạo. Thread là một bước quản lý bên trong một process. Một process đương nhiên hoàn toàn có thể chứa nhiều thread bên trong nó. Khi tất cả chúng ta chạy ứng dụng Word, hệ quản lý và điều hành tạo ra một process và khởi đầu chạy những thread chính của process đó .

Điểm quan trọng nhất cần chú ý là một thread có thể làm bất cứ nhiệm vụ gì một process có thể làm. Tuy nhiên, vì một process có thể chứa nhiều thread, mỗi thread có thể coi như là một process nhỏ. Vậy, điểm khác biệt mấu chốt giữa thread và process là công việc mỗi cái thường phải làm. 

Một điểm độc lạ nữa đó là nhiều thread nằm trong cùng một process dùng một khoảng trống bộ nhớ giống nhau, trong khi process thì không. Điều này được cho phép những thread đọc và viết cùng một kiểu cấu trúc và tài liệu, tiếp xúc thuận tiện giữa những thread với nhau. Giao thức giữa những process, hay còn gọi là IPC ( inter-process communication ) thì tương đối phức tạp bởi những tài liệu có tính tập trung chuyên sâu sâu hơn .

Chương trình thực tập lập trình dành cho sinh viên trái ngành, hoặc học từ đầu. Đảm bảo việc làm sau 6-12 tháng thực tập. Đây là bản dịch của một học viên thực tập sau 1.5 tháng tại Techmaster .

Đa luồng (Mutilple threading)

Thread, dĩ nhiên cho phép chạy đa luồng. Minh hoạ dễ hiểu cho tính ưu việt của sự đa luồng là trình xử lý Word có thể vừa in tài liệu sử dụng một thread nền, vừa cùng lúc chạy một thread khác nhận dữ liệu vào từ người dùng để gõ một văn bản mới.

Nếu bạn đang thao tác với ứng dụng sử dụng một thread duy nhất, mà ứng dụng đó chỉ hoàn toàn có thể làm một việc đơn lẻ vào một thời gian – thì việc vừa in văn bản vừa đảm nhiệm thông tin người dùng là bất khả thi trong ứng dụng đơn luồng này .

Mỗi một process có một vùng nhớ riêng của chúng, song các thread trong cùng một process thì dùng chung địa chỉ nhớ. Và các thread cũng dùng chung bất cứ tài nguyên nào nằm trong process đấy. Có nghĩa là rất dễ để chia sẻ dữ liệu giữa các thread, nhưng cũng rất dễ làm thread này nhảy sang thread khác, dẫn đến một số kết quả tồi tệ.

Các chương trình đa luồng cần được lập trình cẩn trọng để tránh việc nhảy cóc như trên xảy ra. Đoạn mã lệnh biến hóa cấu trúc tài liệu san sẻ giữa những đa luồng này được gọi là những đoạn quan trọng. Khi một đoạn quan trọng đang chạy ở thread này, cần bảo vệ không thread khác nào được phép sử dụng đoạn quan trọng này. Đây là quy đình đồng bộ hoá, nhằm mục đích tránh không bị dừng chương trình một cách giật mình ở đây. Và đó cũng là nguyên do tại sao đa luồng yên cầu lập trình một cách rất cẩn trọng .Nhìn chung, thiên nhiên và môi trường quy đổi của những thread đỡ tốn kém hơn so với giữa những process. Đặt biệt là overhead ( ngân sách giao thức ) giữa những thread đặc biệt quan trọng thấp so với những process .Sau đây là bảng tổng kết sự khác nhau giữa thread và process :

  • Để tạo nhiều thread thì dễ dàng hơn so với process vì chúng không cần các địa chỉ nhớ riêng rẽ.
  • Việc chạy đa luồng cần được lập trình một cách chi tiết vì các thread chia sẻ các cấu trúc chung mà chỉ sử dụng được bởi từng thread vào mỗi thời điểm. Khác với thread, các process không dùng chung địa chỉ nhớ.
  • Thread được xếp hạng “nhẹ cân” bởi vì chúng sử dụng ít tài nguyên hơn so với các process.
  • Các process chạy độc lập với nhau. Các thread thì sử dụng chung các địa chỉ nhớ liên kết với nhau, vì thế cần thận trọng tránh việc thread này nhảy sang thread khác. (Điều đã được nhắc đến trong ý thứ 2 vừa trên)
  • Một process có thể chứa nhiều thread. 
Rate this post