2012-11-18 12 views
5

(chúng ta hãy giả sử tôi có 10 lõi)Song song và phân chia công việc trong C#?

Khi tôi viết:

Parallel.For(0, 100, (i,state) => 
     { 
      Console.WriteLine(i); 
     }); 

Câu hỏi:

  1. công thức gán số lượng con số để mỗi lõi là gì? (là nó 100/10?)

  2. Tại điểm thực thi, mỗi lõi đã biết số số nào sẽ xử lý? Hay nó tiêu thụ mỗi lần một số mới từ kho lưu trữ [0..100] (bây giờ hãy bỏ qua đoạn hoặc phạm vi)?

  3. Thông số i - tham chiếu đến chỉ mục 0..100 hoặc là chỉ mục tương đối trong mỗi chuỗi và số "sắp xếp" của nó?

+0

Bạn đang hỏi cách phân đoạn đầu vào, nhưng bạn đang yêu cầu chúng tôi bỏ qua hai cách 'Sử dụng song song' để phân vùng (phân đoạn dải và dải)? Điều đó không có ý nghĩa với tôi. – svick

+0

@svick cả phạm vi và đoạn tiêu thụ [n] yếu tố trong đó n <= 1. Tôi không quan tâm đến giá trị của [n]. nhưng nếu nó rất quan trọng, hãy giả sử n = 1. –

Trả lời

3
  1. Nó không phải là tài liệu. Có lẽ nhiệm vụ của người lao động là kiểm tra khối lượng công việc từ một nhóm làm việc được chia sẻ. Có lẽ họ lấy ít hơn 10 mặt hàng cùng một lúc vì việc lấy 10 mặt hàng sẽ dẫn đến ít hơn 10 chủ đề đang hoạt động gần cuối hoạt động Parallel.For. Một luồng chậm duy nhất có thể tạo ra một nút cổ chai tuần tự bởi vì nó có thể là luồng duy nhất vẫn đang chạy. Tốt hơn là phân vùng công việc theo các phần nhỏ hơn để loại tắc nghẽn này trở nên nhỏ hơn.

  2. Tôi không biết. Tôi khá chắc chắn một trong những sẽ phải nâng lên thông tin này ra bằng cách sử dụng Reflector.

  3. Nó đề cập đến chỉ mục toàn cầu để bạn có thể sử dụng nó để truy cập danh sách được chia sẻ hoặc thứ gì đó. Mỗi i từng được xem bởi đại biểu công việc của bạn sẽ là duy nhất.