Tôi biết câu hỏi này khá cũ, nhưng mọi thứ đã phát triển từ năm 2009.
Hiện tại có hai điều cần tính đến: số lượng lõi và số lượng luồng có thể chạy trong mỗi lõi.
Với bộ xử lý Intel, số lượng luồng được xác định bởi Hyperthreading chỉ là 2 (khi khả dụng). Nhưng Hyperthreading cắt giảm thời gian thực hiện của bạn xuống hai, ngay cả khi không sử dụng 2 luồng! (tức là 1 đường ống được chia sẻ giữa hai quy trình - điều này tốt khi bạn có nhiều quy trình hơn, không tốt lắm nếu không. Nhiều lõi hơn chắc chắn tốt hơn!)
Trên các bộ xử lý khác, bạn có thể có 2, 4 hoặc thậm chí 8 luồng. Vì vậy, nếu bạn có 8 lõi, mỗi lõi hỗ trợ 8 luồng, bạn có thể có 64 tiến trình chạy song song mà không cần chuyển đổi ngữ cảnh.
"Không chuyển đổi ngữ cảnh" rõ ràng là không đúng nếu bạn chạy với một hệ điều hành tiêu chuẩn sẽ thực hiện chuyển đổi ngữ cảnh cho tất cả các loại khác ngoài tầm kiểm soát của bạn. Nhưng đó là ý chính. Một số HĐH cho phép bạn phân bổ bộ xử lý để chỉ ứng dụng của bạn có quyền truy cập / sử dụng bộ xử lý nói trên!
Từ kinh nghiệm của riêng tôi, nếu bạn có nhiều I / O, nhiều chủ đề là tốt. Nếu bạn có công việc đòi hỏi rất nhiều bộ nhớ (đọc nguồn 1, đọc nguồn 2, tính toán nhanh, viết) thì việc có nhiều luồng không giúp ích được gì. Một lần nữa, điều này phụ thuộc vào số lượng dữ liệu bạn đọc / ghi đồng thời (nghĩa là nếu bạn sử dụng SSE 4.2 và đọc các giá trị 256 bit, điều đó dừng tất cả các luồng trong bước của chúng ... nói cách khác, 1 luồng có thể dễ thực hiện hơn nhiều và có thể gần như nhanh hơn nếu không thực sự nhanh hơn. Điều này phụ thuộc vào kiến trúc quy trình & bộ nhớ của bạn, một số máy chủ nâng cao quản lý phạm vi bộ nhớ riêng cho các lõi riêng biệt, vì vậy các luồng riêng biệt sẽ nhanh hơn khi giả sử dữ liệu của bạn được gửi đúng cách ... Kiến trúc, 4 quy trình sẽ chạy nhanh hơn 1 quy trình với 4 luồng.)