Bất cứ ai có thể đề nghị một dự án cho tôi viết để giúp tôi hiểu luồng


13

Tôi hiện đang là một nhà phát triển C # với sự hiểu biết khá run rẩy về luồng.

Cả hai liên kết này đã được đề xuất trong các bài viết khác:

http://www.yoda.arachsys.com/csharp/threads/

http://www.albahari.com/threading/

Tôi có nên quay lại vấn đề cơ bản và có thể xem xét một số văn bản khoa học máy tính về chủ đề này?

Tôi thực sự cảm thấy rằng nếu tôi nhảy vào và sử dụng các thư viện c # tôi sẽ không thực sự có một nền tảng kiến ​​thức vững chắc để xây dựng. Tôi nghĩ rằng tôi cần học môn này từ đầu như một sinh viên com sci, sau đó sử dụng các thư viện C #.

Bất cứ ai cũng có thể đề xuất một cách tiếp cận để học luồng, có thể một số liên kết và ý tưởng dự án?

Cảm ơn trước!

Chỉnh sửa, cảm ơn cho tất cả các trả lời. Một số người đã đề cập rằng một cuốn sách có thể là một ý tưởng tốt, bất cứ ai có thể đề nghị một cuốn sách? Tôi thích ngôn ngữ bất khả tri. Có ai biết những thứ này sẽ được bao gồm trong một mức độ Khoa học Máy tính? Tôi đang cố gắng để google cho một số ghi chú và bài tập trực tuyến miễn phí.


Tôi không biết điều này có giúp ích gì không nhưng đây là một hướng dẫn đơn giản mà tôi đã viết trong VB.Net một thời gian trước để giải thích khái niệm cơ bản về luồng. Bạn có thể chuyển đổi nó thành C # khá dễ dàng. chrishaas.wordpress.com/2009/06/21/
Chris Haas

Tôi rất muốn đề xuất viết một GUI đa luồng, với lý do nó sẽ dạy các giới hạn của những gì có thể làm với các luồng và vẫn còn lành mạnh. Nhưng điều đó sẽ không mang tính xây dựng, vì vậy tôi sẽ để nó đi như một bình luận, không phải là một câu trả lời LỚN :-)
Donal Fellows

Câu trả lời:


3

Viết một máy chủ web đa luồng. Bạn sẽ học được một TÔN . Và không chỉ về luồng.


4

Vấn đề nhà sản xuất-người tiêu dùng là một ví dụ cổ điển và nó giúp bạn hiểu không chỉ phân luồng, mà cả việc lập lịch trình xử lý (có thể được chứng minh bằng cách sử dụng fork () cho các tiến trình con trái ngược với các luồng) và cách các chương trình của bạn tương tác với hệ điều hành phía sau những cảnh.

Dưới đây là danh sách những điều quan trọng bạn nên hiểu về phân luồng / forking 1. Cách hệ điều hành lên lịch các tác vụ (ví dụ thuật toán robin) 2. Khóa tài nguyên (Nếu nhiều luồng sử dụng cùng một tài nguyên, bạn không muốn chúng được truy cập cùng một lúc - BAD THING HAPPEN)

Dưới đây là một bài viết wiki về vấn đề kinh điển này: http://en.wikipedia.org/wiki/Sản phẩm-ý tưởng

Về cơ bản, tạo một "Nhà sản xuất", người sinh ra các chủ đề của "Người tiêu dùng". Nhà sản xuất tạo ra một "tài nguyên" và người tiêu dùng tiêu thụ nó. Đặt nó trong một vòng lặp và xem điều gì xảy ra (bạn sẽ ngạc nhiên rằng cuối cùng người tiêu dùng sẽ tiêu thụ nhiều tài nguyên hơn sau đó có sẵn do các phương thức không đồng bộ).


Thật thú vị, dường như tôi thiết lập mẫu này mà không nhận ra nó trong khi tạo một dịch vụ windows theo luồng. Mô tả của bạn là hoàn hảo. Một điều tốt để biết, điều này gần như sẽ được đánh dấu là một câu trả lời cho câu hỏi mở của tôi.
Tony

2

Chọn một trong những vấn đề cổ điển song song. Bạn có thể thấy thú vị hơn khi chọn một cái với tốc độ siêu tuyến tính.

Xem xét tìm kiếm thông qua một danh sách chưa được sắp xếp và chưa được lập trình. Vấn đề này là song song. Đầu tiên thực hiện một tìm kiếm theo luồng đơn, sau đó là tìm kiếm song song ngây thơ. Thực hiện hành vi trộm cắp. Tạo một số bộ dữ liệu ngẫu nhiên và chạy cả ba phiên bản trên cùng một bộ dữ liệu. Tính tốc độ.


0

Tôi không nghĩ rằng một cuốn sách giáo khoa là bước tốt nhất tiếp theo. Một dự án là con đường để đi. Nó sẽ là một cái gì đó bạn hào hứng về.

Lần đầu tiên tôi thực hiện phân luồng, tôi đã cải thiện hiệu suất của trình thu thập dữ liệu web. Bạn có thể thu thập dữ liệu nhanh hơn rất nhiều nếu bạn không thực hiện nối tiếp IO mạng của mình. Đây là một dự án tuyệt vời để bắt đầu bởi vì bạn có thể tiếp cận nó khá nhiều cách, nhưng nó gần như không phức tạp như, lập trình GUI đa luồng. Nó cũng không đòi hỏi nhiều kỹ năng chuyên môn (ví dụ, công cụ tính toán nặng).

Vì vậy, tìm ra một số thông tin để cạo và bắt đầu hack. Bạn không cần phải mất nhiều thời gian để làm điều gì đó, đây sẽ là một lời giới thiệu nhẹ nhàng.


Tôi đồng ý với một dự án, nhưng I / O mạng không phải là trường hợp sử dụng tốt cho các luồng. Không chặn I / O hiệu quả hơn, sử dụng ít tài nguyên hơn và chịu ít điều kiện chủng tộc và trường hợp góc hơn so với cùng một vấn đề được giải quyết với các luồng. Một phần của việc học để trở thành một lập trình viên song song giỏi là nhận ra khi các chủ đề không lý tưởng.
Ben Voigt

Bạn rất có thể đúng, kinh nghiệm mà tôi đã đề cập đến là một số trang web Python rất cơ bản, trong đó tôi đã thêm khoảng 8 dòng mã để làm cho nó đa luồng. Tôi nghi ngờ sẽ dễ dàng thực hiện nó không đồng bộ với mã hiện có, nhưng tôi rất muốn biết nếu / tôi đã sai như thế nào. Tôi nghĩ rằng một phần của việc học để trở thành một lập trình viên song song tốt có thể có nhiều kinh nghiệm trong vành đai của bạn, tốt và xấu :)
Henry

0

Mô hình một ứng dụng Spy vs Spy đơn giản.

Mỗi gián điệp chạy trên một chủ đề riêng biệt.

Mỗi gián điệp có thể gây ra thiệt hại cho các điệp viên khác, nhưng không trực tiếp.

Mỗi điệp viên có thể đánh cắp các tài nguyên quý giá từ các điệp viên khác, nhưng không trực tiếp.

Cả hai điệp viên có một nguồn tài nguyên hạn chế theo ý của họ, và phải chia sẻ chúng. Mỗi lần chỉ có một gián điệp có thể sử dụng bất kỳ tài nguyên nào.


0

Ra khỏi đầu tôi: Ấn bản thứ 4 của cuốn sách "Suy nghĩ bằng Java" của Bruce Eckel có một chương rất dài về xâu chuỗi (> 100 trang - gần như là một cuốn sách nhỏ). Tôi đã đọc các ấn bản cũ hơn của cuốn sách, và vì vậy không đọc chương này; nhưng tôi nhớ một trong những bài đăng trên blog của anh ấy (hoặc ghi chú phát hành cuốn sách của anh ấy), nơi anh ấy tuyên bố rằng việc viết này rất khó khăn và cuối cùng nó là một thành tựu thực sự đối với anh ấy. Hãy xem thử ...

Bên cạnh đó, có khóa học video dài 2,5 giờ này trên trang web đào tạo thương mại này, nhưng bạn có thể dùng thử miễn phí (phải để lại dữ liệu thẻ tín dụng; vì vậy đừng quên hủy đăng ký)

http://www.pluralsight-training.net/microsoft/olt/Cference/Toc.aspx?n=clr-threading


0

Tôi có nên quay lại vấn đề cơ bản và có thể xem xét một số văn bản khoa học máy tính về chủ đề này?

Đó luôn là một lựa chọn tốt và tôi khuyên bạn nên chọn một cuốn sách xâu chuỗi tốt để làm quen với việc xâu chuỗi. Tôi đã học đa luồng trong Java và kiến ​​thức được dịch khá dễ dàng sang C #.

Nếu bạn muốn có một ví dụ thực tế, thì tôi khuyên bạn nên thử vấn đề triết gia ăn uống .

Bạn cần học một số điều khi bạn bắt đầu đa luồng:

  1. Các cách khác nhau để đồng bộ hóa (semaphore, mutex, v.v.)
  2. Các hoạt động nguyên tử (trong C # được thực hiện thông qua Liên khóa cho các hoạt động không phải là nguyên tử theo mặc định).
  3. Khóa đồng thời lập trình miễn phí.
  4. Chương trình đồng thời chờ miễn phí.
  5. Chủ đề, ThreadPool, BackgroundWorkers, v.v.

Tôi không thể nghĩ về những thứ khác vào lúc này. Hướng dẫn Albahari trông thực sự tốt!


Thật không may, các triết gia ăn uống không phải là một vấn đề hữu ích. Nó được dự định là một minh chứng cho các điều kiện chủng tộc, nhưng liệu bế tắc có thực sự xảy ra hay không là do sự mơ hồ của bộ lập lịch hệ thống, các tác vụ khác, gián đoạn phần cứng ... nói ngắn gọn là nó hoàn toàn không xác định, và tôi nghĩ đây không phải là nơi tốt để bắt đầu học.
Ben Voigt

1
@Ben Voigt, tôi đồng ý rằng vấn đề triết gia ăn uống là không mang tính quyết định, nhưng tôi nói rằng phần lớn các vấn đề luồng không phải là quyết định. Khi tôi tham gia một lớp lập trình đồng thời, đó là một trong những bài tập đầu tiên chúng tôi đã làm, bây giờ tôi không cho rằng giáo viên nhất thiết phải đúng, nhưng anh ấy chắc chắn là một trong những giáo viên giỏi nhất tôi có và khả năng giải thích và giảng dạy đồng thời là tuyệt vời. DPP chỉ thể hiện một loại vấn đề tương tranh: bế tắc. OP cũng nên xem xét các điều kiện chủng tộc, vấn đề ABA, v.v.
Kiril

@Lirik: Chắc chắn, hiểu vấn đề triết gia ăn uống. Nhưng tôi sẽ không thực hiện nó. Viết mã sai có thể trở thành một thói quen khó phá vỡ.
Bến Vọng

@Ben Voigt, xin lỗi, tôi phải thiếu một cái gì đó: quan điểm của vấn đề triết gia ăn uống là viết một chương trình không bế tắc, vậy làm thế nào để giải quyết DPP yêu cầu viết "mã sai"?
Kiril
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.