2010-03-25 44 views
5

Các quy tắc liên quan đến việc sinh ra chủ đề mới trong các chủ đề đang chạy là gì? Tôi có một ứng dụng C# xử lý hai luồng cơ bản trong nền. Gần đây tôi đã giới thiệu một số công cụ IO nặng nề, và tôi đã nghĩ đến việc đặt chúng ra bên trong các chủ đề. Các chủ đề được lồng trong bản thân có mát không?Chủ đề lồng nhau?

+2

Không chỉ là không sao, không có cách nào khác bạn có thể làm điều đó. Điều duy nhất có thể tạo một chủ đề là một chủ đề. –

Trả lời

8

Chủ đề không được mô hình hóa như một hệ thống phân cấp cho phần lớn quá trình xử lý của chúng; khái niệm "làm tổ" đơn giản là không tồn tại.

Chuỗi được thực hiện song song với tất cả các chuỗi khác, bất kể chuỗi nào đã tạo chuỗi đó. Những điều duy nhất mà quan trọng trong việc tạo ra một chủ đề là cho dù đó là một sợi nền hoặc a thread foreground và ưu tiên của thread:

  • ưu tiên xác định có bao nhiêu lát thời gian thread được đưa ra khi cạnh tranh với các chủ đề khác cho tài nguyên. Ưu tiên cao hơn có nghĩa là nhiều lát hơn.

  • Chủ đề mặt tiền giữ cho quá trình hoạt động cho đến khi công việc của họ hoàn tất. Đối với các chủ đề nền, khi tất cả các chủ đề tiền cảnh hoàn thành việc thực hiện trong một quá trình, quá trình kết thúc và các chủ đề nền được chấm dứt, bất kể công việc của họ đã hoàn thành.

+1

Vâng, trong hầu hết các hệ thống có một khái niệm về chủ đề cha và con. Điều này thường có liên quan bởi vì chỉ có chuỗi gốc sẽ có một xử lý cho chuỗi mới được khởi chạy, ví dụ: chờ đợi cho nó chấm dứt. Vì vậy, có một loại phân cấp ... – sleske

+0

Ông nói C# vì vậy tôi đoán Windows, không có khái niệm như vậy của một chủ đề cha/con. – Michael

4

Chủ đề không lồng vào nhau - chủ đề thuộc về một quá trình. Vì vậy, nếu bạn có chủ đề A & B, và sau đó mỗi người tạo ra C & D, C & D không thuộc về A & B - chúng thuộc về quy trình của bạn.

Vì vậy, có, tạo chuỗi bổ sung từ chủ đề nền được chấp nhận.

1

Giải pháp tốt nhất mà tôi đã tìm thấy với vấn đề đa luồng chung luôn là có một nhóm "chuỗi công việc" luôn chạy mà bạn tạo công việc được đẩy lên hàng đợi. Chuỗi công nhân có sẵn tiếp theo sẽ bật công việc tiếp theo ra khỏi hàng đợi và bắt đầu khuấy động nó. Điều này mang lại cho bạn khả năng đa luồng mà người ta hy vọng và sự đóng gói cần thiết để giữ cho đầu của nó không bị nổ tung.

+0

Âm thanh hợp lý và tối ưu. Tôi sẽ xem xét điều này, nhờ – Olaseni

2

Nếu chuỗi chính đang chờ trên chuỗi con, điều này trình bày yêu cầu đồng bộ hóa mới có thể gây tắc nghẽn.

dụ: (T là viết tắt của chủ đề, R cho tài nguyên chia sẻ)

  • khóa T1 R1
  • T1 bắt đầu T2
  • T3 khóa R2
  • T2 đợi trên R2
  • chờ T1 trên T2
  • T3 đợi trên R1