Hỏi Đáp

Threaded là gì? Single thread và multi thread là gì – Stream Hub

Luồng là gì

Bạn có thể bắt gặp từ luồng/luồng khi nhìn vào thông số kỹ thuật của cpu hoặc nghe bạn bè và gia đình nói về khái niệm này. Trong các bài viết sau, trung tâm phát sóng trực tiếp sẽ giải thích chi tiết và dễ hiểu nhất về thông số cơ bản này cho các bạn.

Luồng cpu là gì

Luồng là một đơn vị cơ bản trong cpu. Một luồng sẽ chia sẻ thông tin dữ liệu, dữ liệu của nó với các luồng khác trong cùng quy trình. Tạo luồng cho phép một chương trình chạy đồng thời nhiều công việc.

Sự khác biệt giữa đơn luồng và đa luồng

Chúng ta cần hiểu hai khái niệm: đơn luồng và đa luồng.

  • Hầu hết phần mềm trong máy tính hiện đại là đa luồng. Hầu hết các ứng dụng trong máy tính đều chạy một tiến trình và nhiều luồng chạy bên trong nó. Bạn có thể hình dung thế này: Trong một trang web, một luồng chịu trách nhiệm chạy hình ảnh và bài viết, trong khi một luồng khác chịu trách nhiệm tìm nạp thêm dữ liệu vào mạng.
  • Các ứng dụng cũng có thể được thiết kế để tận dụng sức mạnh xử lý của các hệ thống đa lõi, giúp thực thi song song nhiều tác vụ CPU.
  • Trong một số trường hợp, một ứng dụng có thể được yêu cầu thực hiện nhiều tác vụ giống nhau. Ví dụ, một web server nhận lệnh, hình ảnh, âm thanh từ khách hàng click vào trang web… Tất nhiên, một web server có thể nhận nhiều (hàng nghìn, hàng triệu, hàng trăm triệu) yêu cầu tại một thời điểm. Vì vậy, nếu máy chủ web đang chạy dưới dạng đơn luồng, nghĩa là chỉ một máy khách có thể xử lý yêu cầu tại một thời điểm nhất định, các máy khách khác sẽ phải chờ một thời gian dài. Các trang web có thể được truy cập. Trước đa luồng, giải pháp cho vấn đề này là máy chủ web sẽ chạy một quy trình nhận nhiều yêu cầu cùng lúc và khi nhận được một yêu cầu, nó sẽ tạo một quy trình khác để xử lý yêu cầu đó. Điều này sẽ mất rất nhiều thời gian và nguồn lực. Đa luồng giúp với điều này. Chúng ta không cần tạo một quy trình mới giống hệt quy trình hiện có mà chỉ cần tạo một quy trình có nhiều luồng chạy cùng nhau. Khi máy chủ nhận được yêu cầu từ máy khách, nó sẽ tạo một luồng mới để luồng đó xử lý yêu cầu đã nhận, đồng thời máy chủ trả về yêu cầu tiếp theo.
  • Ngoài ra, các luồng cũng rất quan trọng đối với hệ thống rpc (gọi thủ tục từ xa – hệ thống cho phép giao tiếp giữa các tiến trình ipc – xảy ra giao tiếp giữa các tiến trình). Tất nhiên, máy chủ rpc cũng đa luồng. Khi máy chủ prc nhận được một tin nhắn, nó sẽ tạo một luồng để xử lý tin nhắn. Đa luồng giúp rpc có thể xử lý nhiều yêu cầu cùng một lúc.
  • Cuối cùng, đa luồng cũng được sử dụng rộng rãi trong các nhân hệ điều hành. Có nhiều luồng chạy trong kernel và mỗi luồng thực hiện một công việc độc lập, chẳng hạn như quản lý thiết bị, quản lý bộ nhớ, quản lý ngắt, v.v. Có thể đưa ra một vài ví dụ: Solaris có một tập hợp các luồng chuyên quản lý các ngắt, hay linux có một luồng nhân chuyên quản lý các vùng bộ nhớ trống trong hệ thống.
    • Lợi ích của Đa luồng: Có 4 lợi ích chính:
      • Khả năng phản hồi: Đa luồng cho phép các ứng dụng tương tác hoạt động tốt hơn vì ngay cả phần A của chương trình cũng bị chặn hoặc mất nhiều thời gian thời gian để làm việc, chương trình thường hoạt động. Điều này khiến người dùng hài lòng hơn do khả năng phản hồi cao của ứng dụng. Điều này đặc biệt đúng đối với người dùng thiết kế. Bạn có thể tưởng tượng: khi một chương trình đang chạy, người dùng nhấn một nút sẽ mất nhiều thời gian để xử lý và hệ thống đơn luồng sẽ không kích hoạt bất kỳ thứ gì khác cho đến khi hoàn thành bước lệnh cuối cùng. Ngược lại, các ứng dụng đa luồng không làm gián đoạn quá nhiều quy trình của người dùng, bởi vì khi một luồng được kích hoạt để thực hiện một bước lệnh khác, một luồng khác sẽ được kích hoạt để thực hiện bất kỳ bước hướng dẫn chi phí thấp nào. lâu hơn người dùng yêu cầu.
      • Chia sẻ tài nguyên: Các quy trình chỉ có thể chia sẻ dữ liệu thông qua các kỹ thuật như chia sẻ bộ nhớ và chia sẻ thông báo. Những kỹ thuật này chỉ có thể được thiết lập bởi lập trình viên. Tuy nhiên, theo mặc định, các luồng chia sẻ thông tin hoặc tài nguyên theo mặc định. Lợi ích của việc chia sẻ mã và dữ liệu là giúp chạy các ứng dụng có nhiều luồng trong một không gian địa chỉ chung.
      • Tiết kiệm: Việc cung cấp tài nguyên và dữ liệu để tạo quy trình rất tốn kém. Vì các luồng tự động chia sẻ dữ liệu với quy trình mà chúng thuộc về, nên việc tạo các luồng để chuyển ngữ cảnh sẽ tiết kiệm rất nhiều tiền. Không chỉ chi phí mà còn cả thời gian, vì việc tạo một quy trình mới mất nhiều thời gian hơn so với việc tạo một luồng mới. Như trong Solaris, việc tạo một quy trình mất nhiều thời gian hơn 30 lần so với việc tạo một luồng trong quy trình đó và lâu hơn 5 lần so với việc tạo một chuyển ngữ cảnh.
      • Khả năng mở rộng: Lợi ích của đa luồng rõ ràng hơn trong kiến ​​trúc đa bộ xử lý, bởi vì đa luồng giúp các luồng hoạt động song song trên các lõi bộ xử lý khác nhau và đa luồng giúp các luồng hoạt động trên các lõi Bộ xử lý khác nhau hoạt động song song và một quy trình đơn luồng, một luồng chỉ có thể chạy trên một bộ xử lý, bất kể có bao nhiêu luồng hiện có trong hệ thống.
      • Mô hình đa luồng

        Sau phần tổng quan về luồng, bài viết này thảo luận về mô hình đa luồng. Đầu tiên, các luồng có thể được hỗ trợ theo hai cách: thông qua người dùng, tạo các luồng người dùng; thông qua nhân máy tính, tạo thành các luồng nhân. Các luồng người dùng được hỗ trợ bởi kernel và có thể được quản lý mà không cần hỗ trợ kernel, trong khi các luồng kernel được hỗ trợ và quản lý trực tiếp bởi hệ điều hành. Các hệ điều hành hiện nay như windows, linux, mac os x, và solaris đều hỗ trợ kernel thread.

        Mặc dù là hai đơn vị riêng biệt nhưng luồng người dùng và luồng nhân có mối quan hệ không thể tách rời. Ba mô hình sau đây cũng là ba cách hình thành mối quan hệ giữa luồng người dùng và luồng nhân: mô hình nhiều-một, mô hình một-một và mô hình một-nhiều.

        Xem Thêm : NaHCO3 + HCl → NaCl + CO2 + H2O – Trường THPT Sóc Trăng

        Mỗi luồng người dùng hoặc các luồng phải ánh xạ tới một hoặc nhiều luồng nhân tương ứng để hệ điều hành xử lý.

        Mô hình nhiều-một

        Mô hình nhiều-một là mô hình trong đó nhiều luồng người dùng kết nối với luồng nhân. Việc quản lý các luồng này dựa trên thư viện luồng trong không gian người dùng. Tuy nhiên, nếu một luồng thực hiện cuộc gọi hệ thống chặn, toàn bộ hệ thống sẽ bị chặn.

        Mô hình một đối một

        Mô hình một đối một là mô hình một đối một trong đó một luồng người dùng được kết nối với một luồng nhân. Mô hình một đối một này đảm bảo tính liên tục, bởi vì nếu một luồng bị chặn, một luồng khác vẫn có thể kết nối với lõi.

        Nó cũng đảm bảo rằng nhiều luồng có thể hoạt động đồng thời trên nhiều bộ xử lý. Nhược điểm duy nhất của mô hình này là nó yêu cầu khi một luồng người dùng hoạt động, một luồng nhân phải được kích hoạt tương ứng. Vì quá nhiều luồng nhân có thể làm quá tải ứng dụng nên các ứng dụng sử dụng mô hình này sẽ giới hạn số lượng luồng được tạo trong hệ thống.

        Linux và windows là những hệ điều hành sử dụng mô hình một đối một.

        Mô hình nhiều-nhiều

        Mô hình nhiều-nhiều chia số luồng cấp người dùng cho ít hơn hoặc bằng số luồng nhân. Số luồng nhân này phụ thuộc vào yêu cầu của ứng dụng người dùng hoặc máy đang được sử dụng (các ứng dụng thường sử dụng nhiều luồng nhân trên bộ đa xử lý hơn trên bộ xử lý đơn). Mô hình này khác với mô hình nhiều-một ở tính liên tục. Trong mô hình nhiều-một, người dùng có thể tạo bất kỳ số lượng luồng người dùng nào, nhưng không thể đảm bảo tính liên tục, vì như đã đề cập ở trên, chỉ một luồng người dùng có thể được kết nối với một lõi.

        Xem Thêm : Cây tài lộc còn được gọi là cây ‘Thần Tài’, đặt ở đâu lộc chảy về chỗ đó

        Mô hình một đối một cho phép tính liên tục hơn, nhưng số lượng luồng được tạo là rất quan trọng nếu bạn không muốn ứng dụng của mình bị quá tải.

        Mô hình nhiều-nhiều sẽ giải quyết các vấn đề của hai mô hình đầu tiên:

        1. Số lượng luồng người dùng được tạo là tùy chọn và các luồng nhân tương ứng có thể chạy song song trên các hệ thống đa bộ xử lý.
        2. Khi một luồng đang thực hiện lệnh gọi hệ thống chặn, luồng nhân tương ứng có thể chuyển sang luồng người dùng khác và giải quyết luồng người dùng đó.
        3. Một biến thể của mô hình nhiều-nhiều là mô hình hai cấp. Mô hình này giống như sự kết hợp giữa mô hình nhiều-nhiều và mô hình một-một, ở chỗ nó vừa chia các luồng cấp người dùng thành các số nhỏ hơn hoặc bằng các luồng nhân tương ứng, vừa cho phép các luồng người dùng độc quyền. kết nối với chủ đề hạt nhân.

          Siêu phân luồng là gì

          Siêu phân luồng đề cập đến khả năng của cpu cho phép một lõi đơn lẻ thực thi nhiều luồng cùng một lúc. Siêu phân luồng tăng tốc độ xử lý/tạo nhiều luồng hơn cho nhiều lõi, nhưng không phải tất cả các lõi. Tùy thuộc vào tác vụ hiện tại, siêu phân luồng có thể giúp mang lại hiệu suất khác nhau trong các lõi khác nhau. Nhưng đôi khi hiệu suất tổng thể có thể giảm.

          Với công nghệ hiện nay 1 nhân có thể sinh ra 2 luồng nên sẽ có nhiều cpu mới ra đời, ví dụ: ryzen 5 có 1600 nhân, số luồng lần lượt là 6 và 12. Tuy nhiên cũng có những cpu mới ví dụ: intel core i5 7400 (kaby lake) thì số nhân và luồng của nó lần lượt chỉ là 4, 4 thôi. Vì vậy, tùy vào công nghệ sử dụng của từng hãng, đối với từng cpu mà số nhân, số luồng khác nhau.

          Tóm lại, siêu phân luồng có nghĩa là CPU có thể cho phép một lõi thực thi nhiều luồng cùng một lúc.

          Một khái niệm hay khác là bộ nhớ đệm, hãy đọc bộ nhớ đệm là gì tại đây.

Nguồn: https://xettuyentrungcap.edu.vn
Danh mục: Hỏi Đáp

Related Articles

Back to top button