2009-10-06 21 views
20

Tôi tạo một chủ đề theo sốChủ đề công nhân và sự khác biệt của nó từ một chuỗi mà tôi tạo ra là gì?

Thread newThread= new Thread(DoSomeWork); 

. 
. 
. 
private void DoSomeWork() 
{ 
} 

Điều này có khác gì so với chuỗi Công nhân không? Nếu nó là ... đó là tốt hơn và khi nào tôi nên sử dụng một sợi công nhân? Ứng dụng của tôi cần phải có rất nhiều chủ đề đang theo dõi, làm mới ..

+1

Bạn có chắc chắn rằng ứng dụng của bạn cần rất nhiều chủ đề? Thực tế là bạn đang đặt câu hỏi này, gợi ý rằng bạn nên cố gắng giảm thiểu luồng ... –

+0

Tôi nên làm gì: Yêu cầu của tôi 1) Đọc ổ cắm và ghi vào một tệp và chèn giá trị trong DB 2) tiếp tục theo dõi DB và hiển thị THOSE giá trị làm mới (hoặc giá trị mới được chèn) trong màn hình giao diện liên tục –

+0

Tj, nó có thể trợ giúp nếu bạn chỉ nền tảng (C#, Java) trong Thẻ. –

Trả lời

20

Nói chung, chuỗi công việc của thuật ngữ được sử dụng để mô tả một luồng khác từ luồng đang thực hiện công việc trên luồng hiện tại - trong nhiều trường hợp tiền cảnh hoặc giao diện người dùng. Điều này không được đúc bằng đá.

Chương trình Windows thường sử dụng một chủ đề chính để quản lý giao diện người dùng và điều này thường đồng bộ (tức là mọi thứ chạy cái này sau cái kia). Nếu có một nhiệm vụ chạy dài để thực hiện sau đó để tránh làm cho khối giao diện người dùng trong các loại chương trình này, bạn sử dụng một chuỗi công nhân (có thể là một chuỗi tiền cảnh hoặc chuỗi nền) để thực hiện công việc (không đồng bộ với chuỗi chính) , và sau đó trình bày các kết quả về chủ đề chính để tiêu thụ.

Trong các chương trình windows, thao tác này được thực hiện qua tin nhắn. Nếu bạn sử dụng các thư viện cụ thể như khuôn khổ .net, thì các lớp tiện ích đặc biệt như ThreadPool và BackgroundWorker có sẵn để làm cho nền hoặc xử lý luồng công việc dễ dàng hơn. Nhưng như mọi khi bạn có thể sử dụng nền tảng nguyên thủy để đạt được cùng một kết thúc.

+0

'Trong cửa sổ chương trình này được thực hiện thông qua tin nhắn.' Không hẳn. Nếu chương trình Windows của bạn thực hiện một số thao tác dài trong chuỗi chính, nó sẽ chặn các thông báo trong suốt thời gian của thao tác đó trừ khi bạn gọi một số chức năng nhất định (ví dụ: 'WaitForSingleObject()' và 'PeekMessage()') trong một vòng lặp . (Xem [câu trả lời này] (http://stackoverflow.com/questions/831265/i-need-a-message-pump-that-doesnt-mess-up-my-open-window/835781#835781) nếu bạn muốn sử dụng kỹ thuật đó.) Tạo ra một chuỗi để thực hiện các quy trình dài đó cho phép bạn tránh làm những vòng lặp đó. – RobH

+0

Bạn hiểu lầm. Đoạn cuối cùng là về cách giao diện người dùng ** chính ** (mà sẽ bơm các cửa sổ thông điệp ở mức thấp nhất), luồng được thông báo từ thứ cấp hoặc trên thực tế nó là tự. Nó không phải là về cách thực hiện đa tác vụ trên chuỗi chính. Các raison d'etre của chủ đề thứ cấp là theo đoạn 2 - để tránh chặn các chủ đề giao diện người dùng. –

7

Tôi không thể nghĩ ra nhiều sự khác biệt về kỹ thuật ngoài thuật ngữ đơn thuần.

Chủ đề công nhân gọi như vậy vì họ đang đợi một số công việc đến và thực hiện công việc khi được người khác chỉ định. Ví dụ, một quá trình máy chủ web nhận được yêu cầu và gán nó cho một luồng từ nhóm của nó để xử lý. Chủ đề đó tuân theo quy trình và hoàn thành công việc và quay lại hồ bơi. Đến lúc đó, sợi chỉ chính sẽ làm việc khác.

Vì mục đích của bạn: Cần giám sát liên tục DB để xác định các giá trị cập nhật/mới. Nó chỉ có thể là một chuỗi, chạy luôn ở chế độ nền, đánh thức định kỳ và cập nhật các giá trị trong giao diện người dùng từ DB.

10

Tôi đang cố gắng giải thích khái niệm theo cách đơn giản, hy vọng nó sẽ giúp hiểu rõ hơn khái niệm chuỗi công nhân.

chung Định nghĩa: -

Một “công nhân chủ đề” chỉ là một sợi chạy để thực hiện một số công việc cơ bản về trật tự của ông chủ của mình (chúng ta có thể gọi nó là “khách hàng”) và kết quả cập nhật công việc với sếp.

Định nghĩa kỹ thuật: -

Một chuỗi công nhân thường được định nghĩa là chuỗi được kích hoạt theo yêu cầu của khách hàng.

Ví dụ 1:

1- Chúng tôi có cửa hàng pizza, nơi có 10 chuyên gia chuẩn bị một chiếc bánh pizza ngon. Chúng được gọi là "chuỗi công nhân".

2- Chúng tôi có một người nhận lệnh từ khách hàng. Người đó được gọi là "khách hàng". Bất cứ khi nào một đơn đặt hàng mới đến, một trong "chuỗi công nhân" bắt đầu chuẩn bị bánh pizza và cập nhật cho khách hàng khi bánh pizza được chuẩn bị.

3- Khi có ít hơn 10 đơn đặt hàng, một số công nhân chỉ ngồi lý tưởng.

4- Khi có hơn 10 đơn đặt hàng, các đơn đặt hàng chỉ được đưa vào hàng chờ.

Ví dụ 2:

1- Có một máy chủ ứng dụng mà lắng nghe cổng 8080.

2- Yêu cầu do thỏa thuận trên cổng 8080.

3 Một chủ đề nghe (nó được gọi là là "khách hàng") nhận yêu cầu đó và gửi nó đến "chuỗi công nhân" hoàn thành yêu cầu. Có thực sự là một hồ bơi của "chủ đề công nhân" duy trì (nhiều đối tượng của chương trình "thread công nhân") trên máy chủ ứng dụng.

4- Nếu hai yêu cầu đến cùng một lúc, hai chuỗi công việc được chỉ định và nhiệm vụ được thực hiện đồng thời.

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