Đa Luồng ( Multiprocessing ) là việc sử dụng hai hoặc nhiều đơn vị xử lý trung tâm (CPU) trong một hệ thống máy tính duy nhất. Định nghĩa này có thể thay đổi tùy thuộc vào ngữ cảnh, nhưng nó thường đề cập đến khả năng hỗ trợ nhiều CPU của hệ thống và khả năng phân phối công việc giữa chúng.
Hiện nay, các vi xử lý đa nhân có thể có 12, 24 hoặc thậm chí nhiều hơn các nhân vi xử lý trên cùng một bo mạch chủ, cho phép xử lý hiệu quả và đồng thời nhiều tác vụ.




Processes ( quy trình ) là gì?
Một tập hợp các chỉ thị được thực hiện bởi bộ xử lý máy tính được gọi là một quy trình hoặc một quy trình đang chạy. Việc thực hiện của một quy trình phải tiến hành theo cách tuần tự. Ví dụ, một chương trình máy tính được viết trong một tệp văn bản, nhưng sau khi được thực thi, nó trở thành một quy trình và thực hiện tất cả các tác vụ được đề cập trong chương trình theo tuần tự.Ví dụ về processes
Một máy tính bình thường chạy đồng thời một số quy trình liên tục để giúp quản lý hệ điều hành (OS), phần cứng và các ứng dụng đã được cài đặt trên máy tính. Điều này có thể bao gồm một tác vụ nền đơn giản như kiểm tra chính tả hoặc xử lý sự kiện hệ thống đến một ứng dụng đầy đủ chức năng như Microsoft Word. Trong Microsoft Windows, mỗi quy trình đang chạy trên máy tính có thể được quan sát bằng cách mở tab Quy trình trong Trình quản lý tác vụ. Các quy trình thường là các chương trình nền mà người dùng thông thường không nhìn thấy khi sử dụng máy tính. Dưới đây là một số ví dụ về các quy trình có thể được quan sát thông qua Trình quản lý tác vụ:- Winlogon.exe. Quy trình này thuộc về trình quản lý đăng nhập Windows và có trách nhiệm xử lý vấn đề bảo mật, chẳng hạn như tải hồ sơ người dùng và khóa màn hình máy tính trong khi màn hình chờ đang chạy.
- Wininit.exe. Quy trình quan trọng này chạy liên tục và giúp thiết lập hệ thống khi đăng nhập ban đầu. Vai trò chính của nó là làm nền cho hầu hết các chương trình nền và quy trình bắt đầu cùng với Windows.
- Csrss.exe. Trước đây, quy trình csrss.exe được sử dụng để quản lý các thành phần đồ họa Windows, nhưng hiện nay, hai chức năng quan trọng nhất của nó là tắt Windows và khởi động quy trình conhost.exe, khởi động Command Prompt.
Các loại hệ thống đa luồng ( multiprocessing systems )
Hệ thống đa luồn hoặc xử lý song song trở nên phổ biến ngày nay. Các hệ thống này sử dụng bộ nhớ chung và phân phối xung điện máy tính, bộ nhớ, bus và các thiết bị ngoại vi giữa nhiều bộ xử lý đồng thời. Multiprocessing được chia thành ba loại sau:Symmetric multiprocessing (SMP)
Trong multiprocessing đối xứng (hoặc “kết nối chặt”), các bộ xử lý chia sẻ bộ nhớ và bus hoặc đường dẫn dữ liệu. Một bản sao duy nhất của hệ điều hành quản lý tất cả các bộ xử lý. SMP, còn được gọi là hệ thống “chia sẻ mọi thứ”, thường không vượt quá 16 bộ xử lý.Asymmetric multiprocessing (AMP)
Trước khi phát triển các bộ xử lý đa tương xứng, chỉ có sẵn các bộ xử lý không tương xứng. Mỗi bộ xử lý trong hệ thống không tương xứng được giao một nhiệm vụ xác định trước. Mối quan hệ chính phụ tồn tại trong hệ thống đa xử lý không đối xứng, trong đó tất cả các bộ xử lý nhận chỉ thị từ một bộ xử lý chính. AMP là một lựa chọn giá rẻ hơn so với SMP.Massively parallel processing (MPP)
Trong xử lý MPP (hoặc “kết nối lỏng”), lên đến 200 hoặc nhiều bộ xử lý khác nhau có thể làm việc trên cùng một ứng dụng. Mỗi bộ xử lý có hệ điều hành và bộ nhớ riêng, nhưng sắp xếp “kết nối” của đường dẫn dữ liệu cho phép gửi tin nhắn giữa các bộ xử lý. Thông thường, thiết lập cho MPP phức tạp hơn, đòi hỏi suy nghĩ về cách phân vùng cơ sở dữ liệu chung giữa các bộ xử lý và cách phân công công việc giữa các bộ xử lý. Một hệ thống MPP còn được gọi là hệ thống “không chia sẻ gì”.
Quy trình so với luồng thực thi ( process vs thread )
Có một sự nhầm lẫn thông thường rằng quy trình và luồng là giống nhau, trong khi thực tế chúng là các chuỗi thực thi riêng biệt. Dưới đây là những khác biệt chung giữa một quy trình và một luồng:- Một quy trình là một phần của một chương trình đang chạy, trong khi một luồng là một phần của một quy trình.
- Luồng nhẹ hơn so với quy trình.
- Khi một quy trình kết thúc, quá trình đó diễn ra chậm hơn so với khi một luồng kết thúc.
- Việc tạo ra một quy trình mất nhiều thời gian hơn so với việc tạo ra một luồng.
- Các quy trình yêu cầu nhiều thời gian để chuyển đổi ngữ cảnh, trong khi luồng cần ít thời gian hơn.
- Không giống như luồng, chia sẻ bộ nhớ giữa các quy trình được tách biệt lớn.
- Dữ liệu không được chia sẻ giữa các quy trình, nhưng nó được chia sẻ giữa các luồng.
