2011-10-07 34 views
21

Tôi đang tìm một số sự cố đồng thời, đơn giản, hợp lý, phù hợp để minh họa việc sử dụng thư viện để tính toán đồng thời mà tôi đang làm việc."Hello World" của các chương trình đồng thời là gì?

Để làm rõ ý nghĩa của "đồng thời": Tôi quan tâm đến các thuật toán sử dụng các quy trình giao tiếp không xác định, không phải trong ví dụ: làm cho các thuật toán như quicksort chạy nhanh hơn bằng cách trải rộng công việc trên nhiều bộ xử lý. This là cách tôi sử dụng thuật ngữ.

Tôi biết về Dining Philosophers Problem và điều đó có thể chấp nhận được, nhưng tôi tự hỏi liệu có bất kỳ vấn đề thuyết phục hơn nhưng đơn giản hơn không.

Trả lời

6

Tôi thường sử dụng kịch bản "chuyển khoản ngân hàng" đơn giản. Ví dụ: tôi đã đăng một trường hợp tầm thường như vậy trong this question on transactions.

Đó là một trường hợp tốt nhất để giải thích vì:

  • Mọi người đều hiểu được vấn đề kinh doanh.
  • Nó nhấn mạnh việc nhập các giao dịch trong một môi trường đồng thời.
  • Bạn có thể dễ dàng mở rộng các kịch bản (ví dụ như nếu bạn muốn tính tổng của tất cả số dư tài khoản vãng lai trong khi giao dịch đang diễn ra?)

Để chứng minh thư viện đồng thời, bạn có thể có thể bắt đầu một thread chạy hàng triệu giao dịch trong loại kịch bản này và chứng minh cách các chủ đề khác vẫn có thể nhìn thấy một chế độ nhất quán của thế giới, v.v.

+0

Cảm ơn! Mặc dù hơi khô, nhưng tôi nghĩ đây là câu trả lời hay nhất cho đến giờ. – jberryman

3

Tôi không nghĩ rằng có một chương trình chuẩn đầu tiên để chứng minh rằng sự tương tranh đang hoạt động, như "Hello world" cho các chương trình tuần tự.

Điển hình cho đồng thời là các chương trình thể hiện sự cố, ví dụ các bộ đếm đồng thời mất một số tính không đồng bộ hóa thích hợp. Hoặc chuyển ngẫu nhiên giữa các tài khoản ngân hàng gây ra bế tắc nếu khóa được thực hiện một cách ngây thơ. (Tôi đã làm điều này khi chơi với đồng thời Java.)

Một điều thể hiện đồng thời và tương đối đơn giản là tính hợp tác: Các chủ đề đồng thời (hoặc bất kỳ) có bộ đếm nội bộ, chúng gửi cho nhau và đặt cho những gì họ nhận được cộng một. (Tôi đã làm điều đó với ba LEGO Mindstorms RCX trên hồng ngoại một vài năm trước đây, làm việc độc đáo.)

BTW: "Hello world" của lập trình nhúng là đèn LED nhấp nháy.

+2

Đặc biệt nếu bạn nhấp nháy "HELLO WORLD" ở Morse. –

1

Bạn có thể theo dõi tia "Hello" và "World" trong các chuỗi riêng biệt. Hoặc tạo hiệu ứng "Xin chào" trong khi "Thế giới" đang chiếu tia sáng.

3

Đã từng là một ứng dụng Java mẫu (có thể vẫn còn) mà bạn đã sử dụng để kiểm tra lịch biểu nào thuật toán JVM của bạn và sử dụng hệ điều hành cơ bản. Nó hoạt hình hai (hoặc tùy chọn nhiều hơn? Không thể nhớ) thanh dần dần làm đầy, mỗi hoạt hình bởi một chủ đề khác nhau ở cùng một ưu tiên.

Một tương đương in:

red 1 
red 2 
green 1 
red 3 
green 2 

vv để giao diện điều khiển, dường như đối với tôi là điều gần gũi nhất với tinh thần của xương trần bản chất của "hello, world". Đó là, "tôi có thể làm cho máy tính làm điều gì đó vô ích nhưng có thể nhìn thấy?" Vì vậy, trong mỗi chủ đề bạn muốn một loạt các tạm dừng (hoặc vòng bận hoặc ngủ, tùy thuộc vào bạn, và bạn chọn có thể ảnh hưởng đến đầu ra tùy thuộc vào cách đồng thời của bạn được lên lịch), mỗi theo sau là một số đầu ra. Bạn có thể muốn đồng bộ hóa đầu ra - không thực sự cần thiết, nhưng nếu một dòng được chia nhỏ bởi bộ lập lịch thì sẽ rất khó đọc. Sau đó, nếu mô hình đồng thời của bạn là hợp tác (hoặc chủ đề đồ đá mới, hoặc có lẽ là một thứ dựa trên thường lệ), bạn phải thêm hiệu suất phù hợp, để ngăn chặn thanh màu đỏ đầy trước khi thanh màu xanh lá cây bắt đầu. Điều đó cho bạn biết rằng bạn đã tạo thành công mã đồng thời xen kẽ của mình.

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