Hệ điều hành - Đa luồng
Thread là gì?
Một luồng là một luồng thực thi thông qua mã quy trình, với bộ đếm chương trình riêng của nó để theo dõi lệnh nào sẽ thực thi tiếp theo, các thanh ghi hệ thống chứa các biến làm việc hiện tại của nó và một ngăn xếp chứa lịch sử thực thi.
Một luồng chia sẻ với các luồng ngang hàng của nó một số thông tin như phân đoạn mã, phân đoạn dữ liệu và các tệp đang mở. Khi một luồng thay đổi một mục bộ nhớ đoạn mã, tất cả các luồng khác sẽ thấy điều đó.
Một chuỗi còn được gọi là lightweight process. Chủ đề cung cấp một cách để cải thiện hiệu suất ứng dụng thông qua song song. Luồng thể hiện một cách tiếp cận phần mềm để cải thiện hiệu suất của hệ điều hành bằng cách giảm luồng chi phí tương đương với một quy trình cổ điển.
Mỗi luồng thuộc chính xác một quy trình và không luồng nào có thể tồn tại bên ngoài một quy trình. Mỗi luồng đại diện cho một luồng điều khiển riêng biệt. Chủ đề đã được sử dụng thành công trong việc triển khai máy chủ mạng và máy chủ web. Chúng cũng cung cấp nền tảng phù hợp để thực hiện song song các ứng dụng trên bộ đa xử lý bộ nhớ dùng chung. Hình dưới đây mô tả hoạt động của một quá trình đơn luồng và đa luồng.
Sự khác biệt giữa Process và Thread
SN | Quá trình | Chủ đề |
---|---|---|
1 | Quá trình có trọng lượng lớn hoặc sử dụng nhiều tài nguyên. | Thread có trọng lượng nhẹ, chiếm ít tài nguyên hơn một quy trình. |
2 | Quá trình chuyển đổi cần tương tác với hệ điều hành. | Chuyển đổi luồng không cần phải tương tác với hệ điều hành. |
3 | Trong nhiều môi trường xử lý, mỗi tiến trình thực thi cùng một mã nhưng có bộ nhớ và tài nguyên tệp riêng. | Tất cả các luồng có thể chia sẻ cùng một tập hợp các tệp đang mở, các quy trình con. |
4 | Nếu một quá trình bị chặn, thì không quá trình nào khác có thể thực thi cho đến khi quá trình đầu tiên được bỏ chặn. | Trong khi một luồng bị chặn và đang chờ, một luồng thứ hai trong cùng một tác vụ có thể chạy. |
5 | Nhiều quy trình mà không sử dụng luồng sử dụng nhiều tài nguyên hơn. | Nhiều quy trình phân luồng sử dụng ít tài nguyên hơn. |
6 | Trong nhiều quy trình, mỗi quy trình hoạt động độc lập với các quy trình khác. | Một luồng có thể đọc, ghi hoặc thay đổi dữ liệu của luồng khác. |
Ưu điểm của Thread
- Các luồng giảm thiểu thời gian chuyển đổi ngữ cảnh.
- Sử dụng các luồng cung cấp sự đồng thời trong một quy trình.
- Giao tiếp hiệu quả.
- Sẽ tiết kiệm hơn khi tạo và chuyển đổi ngữ cảnh các luồng.
- Các luồng cho phép sử dụng kiến trúc đa xử lý ở quy mô và hiệu quả cao hơn.
Các loại chủ đề
Các chủ đề được thực hiện theo hai cách sau:
User Level Threads - Chủ đề do người dùng quản lý.
Kernel Level Threads - Các luồng được quản lý hệ điều hành hoạt động trên nhân, một lõi của hệ điều hành.
Chủ đề cấp độ người dùng
Trong trường hợp này, nhân quản lý luồng không biết về sự tồn tại của các luồng. Thư viện luồng chứa mã để tạo và hủy luồng, để truyền thông điệp và dữ liệu giữa các luồng, để lập lịch thực thi luồng và lưu và khôi phục ngữ cảnh luồng. Ứng dụng bắt đầu với một luồng duy nhất.
Ưu điểm
- Chuyển đổi luồng không yêu cầu đặc quyền chế độ Kernel.
- Chủ đề cấp người dùng có thể chạy trên bất kỳ hệ điều hành nào.
- Lập lịch có thể là ứng dụng cụ thể trong luồng cấp người dùng.
- Chủ đề cấp độ người dùng được tạo và quản lý nhanh chóng.
Nhược điểm
- Trong một hệ điều hành điển hình, hầu hết các cuộc gọi hệ thống đều bị chặn.
- Ứng dụng đa luồng không thể tận dụng đa xử lý.
Chủ đề cấp nhân
Trong trường hợp này, việc quản lý luồng được thực hiện bởi Kernel. Không có mã quản lý luồng trong khu vực ứng dụng. Các luồng nhân được hỗ trợ trực tiếp bởi hệ điều hành. Bất kỳ ứng dụng nào cũng có thể được lập trình để chạy đa luồng. Tất cả các chuỗi trong một ứng dụng được hỗ trợ trong một quy trình duy nhất.
Kernel duy trì thông tin ngữ cảnh cho toàn bộ quá trình và cho các luồng riêng lẻ trong quá trình. Lập lịch bởi Kernel được thực hiện trên cơ sở luồng. Kernel thực hiện tạo luồng, lập lịch và quản lý trong không gian Kernel. Các luồng nhân thường chậm tạo và quản lý hơn các luồng người dùng.
Ưu điểm
- Kernel có thể lập lịch đồng thời nhiều luồng từ cùng một tiến trình trên nhiều tiến trình.
- Nếu một luồng trong một tiến trình bị chặn, Kernel có thể lên lịch cho một luồng khác của cùng một tiến trình.
- Bản thân các quy trình hạt nhân có thể được đa luồng.
Nhược điểm
- Các luồng nhân thường chậm tạo và quản lý hơn các luồng người dùng.
- Việc chuyển quyền điều khiển từ luồng này sang luồng khác trong cùng một quy trình yêu cầu chuyển chế độ sang Kernel.
Mô hình đa luồng
Một số hệ điều hành cung cấp một luồng cấp người dùng kết hợp và cơ sở luồng cấp Kernel. Solaris là một ví dụ điển hình về cách tiếp cận kết hợp này. Trong một hệ thống kết hợp, nhiều luồng trong cùng một ứng dụng có thể chạy song song trên nhiều bộ xử lý và một lệnh gọi hệ thống chặn không cần phải chặn toàn bộ quá trình. Mô hình đa luồng có ba loại
- Nhiều mối quan hệ.
- Mối quan hệ nhiều đối một.
- Mối quan hệ 1-1.
Nhiều mẫu
Mô hình nhiều-nhiều ghép bất kỳ số luồng người dùng nào vào một số luồng nhân bằng hoặc nhỏ hơn.
Sơ đồ sau đây cho thấy mô hình phân luồng nhiều-nhiều trong đó 6 luồng cấp người dùng đang ghép kênh với 6 luồng cấp nhân. Trong mô hình này, các nhà phát triển có thể tạo bao nhiêu luồng người dùng nếu cần và các luồng Kernel tương ứng có thể chạy song song trên một máy đa xử lý. Mô hình này cung cấp độ chính xác tốt nhất về tính đồng thời và khi một luồng thực hiện một lệnh gọi hệ thống chặn, hạt nhân có thể lên lịch cho một luồng khác để thực thi.
Nhiều đến một mô hình
Mô hình nhiều-một ánh xạ nhiều luồng cấp người dùng thành một luồng cấp nhân. Quản lý luồng được thực hiện trong không gian người dùng bởi thư viện luồng. Khi luồng thực hiện cuộc gọi hệ thống chặn, toàn bộ quá trình sẽ bị chặn. Chỉ một luồng có thể truy cập vào Kernel tại một thời điểm, vì vậy nhiều luồng không thể chạy song song trên các bộ đa xử lý.
Nếu các thư viện luồng cấp người dùng được triển khai trong hệ điều hành theo cách mà hệ thống không hỗ trợ chúng, thì luồng Kernel sử dụng chế độ quan hệ nhiều-một.
Một đến một Mô hình
Có mối quan hệ 1-1 của luồng cấp người dùng với luồng cấp nhân. Mô hình này cung cấp nhiều tính đồng thời hơn so với mô hình nhiều-một. Nó cũng cho phép một luồng khác chạy khi một luồng thực hiện một cuộc gọi hệ thống chặn. Nó hỗ trợ nhiều luồng để thực thi song song trên vi xử lý.
Nhược điểm của mô hình này là việc tạo luồng người dùng yêu cầu luồng Kernel tương ứng. OS / 2, windows NT và windows 2000 sử dụng mô hình quan hệ 1-1.
Sự khác biệt giữa luồng cấp người dùng và cấp nhân
SN | Chủ đề cấp độ người dùng | Chủ đề cấp nhân |
---|---|---|
1 | Chủ đề cấp người dùng được tạo và quản lý nhanh hơn. | Các luồng cấp nhân chậm hơn để tạo và quản lý. |
2 | Việc triển khai là bởi một thư viện luồng ở cấp độ người dùng. | Hệ điều hành hỗ trợ tạo luồng Kernel. |
3 | Chủ đề cấp người dùng là chung và có thể chạy trên bất kỳ hệ điều hành nào. | Luồng cấp hạt nhân dành riêng cho hệ điều hành. |
4 | Các ứng dụng đa luồng không thể tận dụng lợi thế của đa xử lý. | Bản thân các quy trình hạt nhân có thể được đa luồng. |