API Stream được thiết kế để giúp dễ dàng viết các tính toán theo cách được trừu tượng hóa khỏi cách chúng sẽ được thực thi, giúp chuyển đổi giữa tuần tự và song song dễ dàng.
Tuy nhiên, chỉ vì nó dễ dàng, không có nghĩa là nó luôn luôn là một ý tưởng tốt, và trên thực tế, đó là một ý tưởng tồi khi chỉ cần bỏ .parallel()
đi khắp nơi chỉ vì bạn có thể.
Đầu tiên, lưu ý rằng tính song song không mang lại lợi ích nào ngoài khả năng thực thi nhanh hơn khi có nhiều lõi hơn. Một thực thi song song sẽ luôn liên quan đến nhiều công việc hơn một công việc tuần tự, bởi vì ngoài việc giải quyết vấn đề, nó còn phải thực hiện việc gửi và điều phối các nhiệm vụ phụ. Hy vọng là bạn sẽ có thể có được câu trả lời nhanh hơn bằng cách chia nhỏ công việc trên nhiều bộ xử lý; việc này có thực sự xảy ra hay không phụ thuộc vào rất nhiều thứ, bao gồm kích thước của tập dữ liệu của bạn, mức độ tính toán của bạn trên mỗi phần tử, tính chất của tính toán (cụ thể là việc xử lý một phần tử có tương tác với xử lý của phần tử khác không?) , số lượng bộ xử lý có sẵn và số lượng các tác vụ khác cạnh tranh cho các bộ xử lý đó.
Hơn nữa, lưu ý rằng song song cũng thường phơi bày chủ nghĩa không xác định trong tính toán thường bị ẩn bởi các triển khai tuần tự; đôi khi điều này không thành vấn đề, hoặc có thể được giảm thiểu bằng cách hạn chế các hoạt động liên quan (nghĩa là, các toán tử giảm phải không trạng thái và liên kết.)
Trong thực tế, đôi khi song song sẽ tăng tốc tính toán của bạn, đôi khi nó sẽ không, và đôi khi nó sẽ làm chậm nó. Tốt nhất là phát triển đầu tiên bằng cách sử dụng thực thi tuần tự và sau đó áp dụng song song trong đó
(A) bạn biết rằng thực sự có lợi cho việc tăng hiệu suất và
(B) rằng nó thực sự sẽ cung cấp hiệu suất tăng.
(A) là một vấn đề kinh doanh, không phải là một vấn đề kỹ thuật. Nếu bạn là một chuyên gia về hiệu suất, bạn thường sẽ có thể xem mã và xác định (B), nhưng con đường thông minh là để đo lường. (Và, thậm chí đừng bận tâm cho đến khi bạn bị thuyết phục (A); nếu mã đủ nhanh, tốt hơn để áp dụng chu kỳ não của bạn ở nơi khác.)
Mô hình hiệu suất đơn giản nhất cho tính song song là mô hình "NQ", trong đó N là số phần tử và Q là tính toán trên mỗi phần tử. Nói chung, bạn cần NQ sản phẩm vượt quá một số ngưỡng trước khi bạn bắt đầu nhận được lợi ích hiệu suất. Đối với một vấn đề Q thấp như "cộng các số từ 1 đến N", bạn thường sẽ thấy mức hòa vốn giữa N = 1000 và N = 10000. Với các vấn đề Q cao hơn, bạn sẽ thấy breakevens ở ngưỡng thấp hơn.
Nhưng thực tế khá phức tạp. Vì vậy, cho đến khi bạn đạt được kinh nghiệm, trước tiên hãy xác định khi nào việc xử lý tuần tự thực sự khiến bạn phải trả giá, và sau đó đo lường xem liệu song song có giúp ích gì không.