2010-02-01 54 views
9

Tôi nghĩ bản thân mình là một nhà phát triển khá phong nha, tuy nhiên khi nói đến đa luồng, tôi là tổng số n00b. Tôi có nghĩa là đa luồng duy nhất tôi đã thực hiện tại nơi làm việc là những thứ rất cơ bản như sinh sản ra nhiều chủ đề bằng cách sử dụng ThreadPool để làm một số công việc nền. Không cần đồng bộ hóa và không bao giờ cần phải tạo chuỗi thủ công.Tìm kiếm một bài tập tốt để giúp tôi trở nên giỏi hơn trong Đa luồng

Vì vậy, câu hỏi của tôi là như vậy; Tôi muốn viết một số ứng dụng sẽ cần phải được multithreaded nặng và sẽ cần phải làm tất cả những điều tiên tiến như đồng bộ hóa vv .. Tôi chỉ không thể nghĩ ra bất cứ điều gì để viết. Tôi đã nghĩ đến việc có thể cố gắng viết ThreadPool của riêng mình, nhưng tôi nghĩ rằng tôi cần phải học cách đi bộ trước khi tôi có thể chạy. Vì vậy, những ý tưởng bất cứ ai có thể đề nghị? Nó không cần phải có bất kỳ sự sử dụng thế giới thực, nó có thể hoàn toàn vô nghĩa và vô giá trị, nhưng tôi chỉ muốn trở nên tốt hơn. Tôi đã đọc rất nhiều bài báo và hướng dẫn về tất cả các lý thuyết, nhưng cách duy nhất để THỰC SỰ trở nên tốt hơn là bằng cách thực hiện. Vì vậy, bất kỳ ý tưởng?

+5

Thử xén máy may của vợ tôi. Điều đó chạy nhiều chủ đề hơn M $ Office 2000 –

+0

ba-dum, tishhhh. – QueueHammer

Trả lời

7
  1. Sắp xếp nhanh sắp xếp. So sánh thời gian sắp xếp theo chức năng của số lượng chủ đề.
  2. Trình mô phỏng craps. Bạn có thể làm bao nhiêu cuộn xúc xắc mỗi phút?
  3. Trình thu thập dữ liệu trang web. Cung cấp cho nó một URL và tải xuống tất cả các trang và hình ảnh con. Theo dõi các trang tham chiếu lẫn nhau để bạn không đi vào vòng lặp vô hạn. Lưu ý rằng các luồng sẽ chặn việc chờ phản hồi mạng, cho bạn khả năng sử dụng CPU khác với các chủ đề dựa trên tính toán thuần túy. Sử dụng hàng đợi để theo dõi các trang chưa đọc và một từ điển để theo dõi các chủ đề đang hoạt động. Chủ đề mà thời gian chờ quay trở lại hàng đợi.
  4. máy chủ web WCF. Sinh ra một chuỗi mới cho mỗi yêu cầu. Viết một máy khách WPF đa luồng cập nhật giao diện người dùng trong thời gian thực.

Vậy là đủ chưa?

+1

Đã viết một Trình thu thập thông tin web. Great Great ý tưởng! Thật là vui. Việc phải tạo chuỗi Chủ đề an toàn cũng như bộ nhớ cache theo dõi các URL đã được kiểm tra chỉ là bài tập tôi cần. Cảm ơn! Tôi sẽ cung cấp cho máy chủ web WCF một thử tiếp theo. – BFree

3

Làm thế nào về một số loại ứng dụng xử lý hàng loạt vô nghĩa? Tạo ra một lượng dữ liệu khủng khiếp trong một chuỗi đơn lẻ và đổ nó ra một tệp, sau đó bắt đầu chia công việc thành các chuỗi có kích thước khác nhau và bán chúng ra tệp khác, thời gian và so sánh các tệp ở cuối để đảm bảo thứ tự là giống nhau. Điều này sẽ giúp bạn vào đa luồng, khóa, mutexes và những gì không và cũng cho thấy những lợi ích của đa luồng nhiệm vụ nhất định so với xử lý trong một chủ đề duy nhất.

Điều đầu tiên xuất hiện trong đầu tôi. Có thể là ngu si đần độn và/hoặc vô nghĩa, nhưng không bắn sứ giả! :)

+0

Đề xuất thú vị. Không chắc chắn tôi hoàn toàn hiểu ý của bạn mặc dù với "thời gian họ và so sánh các tập tin ở cuối để đảm bảo trật tự là như nhau" – BFree

+0

Xin lỗi - tôi có nghĩa là thời gian thời gian thực hiện trên một chủ đề duy nhất, sau đó thời gian thực hiện trên 2, 3, 4, n chủ đề vv –

3

Tôi nghĩ bạn nên chú ý cho sách này:

  1. Windows via C/C++ bởi Jeffrey Richter. Đây là một trong những cuốn sách hay nhất về đa luồng
  2. Concurrent Programming on Windows bởi Joe Duffy. Một cuốn sách xuất sắc về đa luồng

bài viết xuất sắc của Herb Sutter (Herb, tất cả chúng ta chờ đợi cuốn sách mới của bạn!)

Effective Concurrency loạt

Một số blog:

  1. Herb Sutter's blog.
  2. Parallel programming with .Net
  3. Jeffrey Richter's Blog
  4. Joe Duffy's blog

T.B. Làm thế nào về Power Threading như là một ví dụ về đa luồng (và thực hiện ThreadPool)?

+0

+1 cho jeffrey ritcher; yêu sách của mình ... –

+0

Tài liệu đọc tuyệt vời, nhưng tôi thực sự muốn viết một số mã. Tôi đã đọc đủ ... – BFree

+0

Có thể thử triển khai máy chủ socket đa luồng? Hoặc một số tính toán đa luồng đơn giản? –

Các vấn đề liên quan