Tôi quan tâm đến việc tìm hiểu về lập trình song song trong C# .NET (không giống như mọi thứ có thể biết, nhưng cơ bản và có thể một số thực hành tốt), do đó tôi đã quyết định lập trình lại chương trình cũ của tôi được gọi là ImageSyncer. ImageSyncer là một chương trình thực sự đơn giản, tất cả những gì bạn cần làm là quét một thư mục và tìm tất cả các tệp kết thúc bằng .jpg, sau đó nó tính toán vị trí mới của các tệp dựa trên ngày chúng được thực hiện (phân tích cú pháp xif-data hoặc bất kỳ thứ gì nó được gọi là). Sau khi một vị trí được tạo ra, chương trình sẽ kiểm tra bất kỳ tệp hiện có nào tại vị trí đó và nếu có tồn tại, nó sẽ xem thời gian ghi cuối cùng của cả tệp để sao chép và tệp "theo cách của nó". Nếu những người bằng nhau thì tập tin bị bỏ qua. Nếu không phải tổng kiểm tra md5 của cả hai tệp được tạo và khớp. Nếu không có tệp trùng khớp nào được sao chép thì phải có một vị trí mới cần sao chép (ví dụ, nếu nó được sao chép vào "C: \ test.jpg" thì nó được sao chép vào "C: \ test (1). jpg "thay vào đó". Kết quả của hoạt động này được điền vào hàng đợi của một kiểu cấu trúc có chứa hai chuỗi, tệp gốc và vị trí để sao chép nó. Sau đó, hàng đợi đó được lặp lại cho đến khi nó trống và các tệp được sao chép.Lập trình song song trong C#
Nói cách khác có 4 hoạt động:
1. Scan directory for jpegs
2. Parse files for xif and generate copy-location
3. Check for file existence and if needed generate new path
4. Copy files
Và vì vậy tôi muốn viết lại chương trình này để làm cho nó song song và có thể thực hiện một số các hoạt động cùng một lúc, và tôi đã tự hỏi những gì cách tốt nhất để đạt được điều đó. Tôi đã nghĩ ra hai mô hình khác nhau mà tôi có thể nghĩ đến, nhưng không phải một trong số đó có thể là một điều tốt. Đầu tiên là để song song với 4 bước của chương trình cũ, để khi bước một được thực hiện nó được thực hiện trên một số chủ đề, và khi toàn bộ bước 1 là kết thúc bước 2 được bắt đầu. Một cái khác (mà tôi thấy thú vị hơn bởi vì tôi không biết làm thế nào để làm điều đó) là tạo ra một loại công nhân và mô hình người tiêu dùng, vì vậy khi một luồng được hoàn thành với bước 1, một cái khác tiếp quản và thực hiện bước 2 tại đó đối tượng (hoặc một cái gì đó như thế). Nhưng như đã nói, tôi không biết nếu có bất kỳ giải pháp tốt nào. Ngoài ra, tôi không biết nhiều về lập trình song song. Tôi biết cách tạo một chuỗi và cách làm cho nó thực hiện một chức năng tham gia một đối tượng làm tham số duy nhất của nó, và tôi cũng đã sử dụng lớp BackgroundWorker trong một dịp, nhưng tôi không quen thuộc với bất kỳ thứ gì trong số chúng .
Bất kỳ đầu vào nào cũng sẽ được đánh giá cao.
này nghe có vẻ giống như một nhiệm vụ thú vị, nhưng vì nó có khả năng là IO ràng buộc, nhiều chủ đề tất cả đập đi vào đĩa sẽ rất có khả năng làm cho chương trình chạy _slower_ hơn nếu bạn chỉ sử dụng một sợi. –
Thanx, tôi đã không thực sự xem xét điều này. Nhưng tôi nghĩ rằng ít nhất bước 2 và 3 có thể được hưởng lợi từ việc sử dụng một số chủ đề, bạn sẽ không đồng ý? – Alxandr
http://messagingbus.codeplex.com/ có thể giúp –