Tôi sẽ đưa ra nhận xét này nhưng đã quá dài.
CodemonkeyKing dường như đã đạt được một điểm quan trọng, mặc dù không đủ mạnh theo ý kiến của tôi.
Có rất nhiều tiêu chí bạn có thể sử dụng để mô tả mã. Nó sẽ được sử dụng trong một ứng dụng chạy dài hay không? Winforms ứng dụng hay không? Đây có phải là ứng dụng Máy chủ hoặc ứng dụng khách không? thư viện hoặc exe độc lập? v.v.
Dường như với tôi rằng nếu mã của bạn sẽ chạy trong một ứng dụng độc lập và bạn có quyền kiểm soát tất cả mã xung quanh, thì bạn có thể cuộn hồ bơi chủ đề của riêng mình, bắt đầu chủ đề của riêng mình và đo lường và quản lý chi phí xung quanh khởi động luồng, độ trễ luồng và mức tiêu thụ tài nguyên. Hoặc bạn có thể sử dụng QUWI, nhưng nó sẽ không giết chết ứng dụng của bạn theo cách nào. Bạn được tự do lựa chọn. Mặt khác, nếu mã của bạn được đóng gói như một thư viện có thể được sử dụng trong một máy chủ -in ASP.NET, hoặc có thể trong một ứng dụng SQL CLR, hoặc một dịch vụ WCF - sau đó nó là một ý tưởng thực sự tồi tệ để tạo chủ đề. Bạn cần phải sử dụng QUWI hoặc một số cơ chế khác khai thác nhóm chủ đề tích hợp (như BackgroundWorker). Nếu nó được sử dụng trong các ứng dụng phía máy khách với các thư viện khác, một lần nữa, QUWI là bắt buộc. Hãy tưởng tượng rằng mọi thư viện muốn tận dụng lợi thế của các máy tính đa lõi đã cuộn các chuỗi của riêng chúng. Sẽ có sự hỗn loạn hoàn toàn trong các ứng dụng sử dụng nhiều thư viện. Chủ đề hung hăng, tất cả cạnh tranh cho cùng một tài nguyên. Không có sự phối hợp trung tâm của #threads vs # processor.
Tốt hygeine yêu cầu rằng thư viện, cho dù thư viện đó được sử dụng trong ứng dụng khách hay ứng dụng máy chủ, sử dụng luồng chung và điều đó có nghĩa là QUWI.
Điều cuối cùng để nhận ra là điều này;
Chuỗi được quản lý là chuỗi nền hoặc chuỗi tiền cảnh. Các chủ đề nền giống hệt với các chủ đề tiền cảnh với một ngoại lệ: một luồng nền không giữ cho môi trường thực thi được quản lý đang chạy. Một khi tất cả các chủ đề tiền cảnh đã được dừng lại trong một quá trình được quản lý (nơi tệp .exe là một assembly được quản lý), hệ thống sẽ dừng tất cả các luồng nền và tắt.
Chủ đề thuộc về nhóm chủ đề được quản lý (có nghĩa là các chuỗi có thuộc tính IsThreadPoolThread là đúng) là các chuỗi nền. Tất cả các chuỗi nhập vào môi trường thực thi được quản lý từ mã không được quản lý đều được đánh dấu làm chủ đề nền. Tất cả các chủ đề được tạo ra bằng cách tạo và bắt đầu một đối tượng Thread mới là theo các chủ đề tiền cảnh mặc định.
Nếu bạn sử dụng một chuỗi để theo dõi hoạt động, chẳng hạn như kết nối ổ cắm, hãy đặt thuộc tính IsBackground thành true để chủ đề không ngăn quá trình chấm dứt của bạn.
từ MSDN site.
Tôi đã không thực sự hưởng lợi từ cuộc thảo luận đó, mà dường như chủ yếu là một cuộc tranh luận về chi phí bắt đầu một sợi. – Cheeso
Tôi nghĩ rằng liên kết thật tuyệt vời. Tôi đã không thấy bất cứ điều gì về chi phí bắt đầu một sợi trong câu trả lời được chấp nhận - nhưng một số hạn chế của threadpool được liệt kê khá tốt ở đó. – BrainSlugs83