Số lượng chủ đề tối đa bạn có thể tạo trong ứng dụng C# là bao nhiêu? Và điều gì xảy ra khi bạn đạt đến giới hạn này? Là một ngoại lệ của một số loại ném?Số lượng chủ đề tối đa trong ứng dụng .NET?
Trả lời
Không có giới hạn cố hữu. Số lượng chủ đề tối đa được xác định bởi số lượng tài nguyên vật lý có sẵn. Xem chi tiết article by Raymond Chen để biết chi tiết cụ thể.
Nếu bạn cần hỏi số lượng chủ đề tối đa là gì, có thể bạn đang làm điều gì đó sai.
[Cập nhật: Chỉ ra quan tâm: NET Chủ đề Pool số mặc định của bài:
- 1023 trong Framework 4.0 (32-bit môi trường)
- 32768 trong Framework 4.0 (64-bit môi trường)
- 250 cho mỗi lõi trong khung 3,5
- 25 mỗi lõi trong khung 2,0
(Những con số này có thể thay đổi tùy thuộc vào phần cứng và hệ điều hành)]
Bạn đã hình dung ra điều này như thế nào? Bạn có biết .NET 4.5 là gì không, hay cái gì sẽ là 5.0? – LamonteCristo
tự hỏi số điện thoại đó đến từ số – RollRoll
Bạn có thể sử dụng mã này để nhận số lượng: \t \t \t int workerThreads; \t \t \t int completionPortThreads; \t \t \t ThreadPool.GetMaxThreads (out workerThreads, out completionPortThreads); – JALLRED
Jeff Richter trong CLR thông qua C#:
"Với phiên bản 2.0 của CLR, số lượng tối đa đề người lao động mặc định để 25 mỗi CPU trong máy và số lượng tối đa I/O chủ đề mặc định là 1000. Giới hạn 1000 không có giới hạn nào cả. "
Lưu ý điều này dựa trên .NET 2.0. Điều này có thể đã thay đổi trong .NET 3.5.
[Chỉnh sửa] Như @Mitch đã chỉ ra, điều này đặc trưng cho CLR ThreadPool. Nếu bạn đang tạo chủ đề trực tiếp, hãy xem @Mitch và các nhận xét khác.
Tôi nghĩ rằng bạn đang đề cập đến threadpool. –
Bạn đang nhầm lẫn giữa CLR 2.0 và .NET 2.0 trong nhận xét của bạn về .NET 3.5. – bzlm
Theo như tôi biết SP1 cho .NET 2.0 (một phần của .NET 3.5) đã thay đổi các luồng công nhân mặc định là 250 cho mỗi CPU/lõi cho các nhóm luồng. –
Mitch là đúng. Nó phụ thuộc vào tài nguyên (bộ nhớ).
Mặc dù bài viết của Raymond dành riêng cho chủ đề Windows, chứ không phải chủ đề C#, logic cũng được áp dụng giống nhau (các chuỗi C# được ánh xạ tới các chuỗi của Windows).
Tuy nhiên, như chúng ta đang ở trong C#, nếu chúng ta muốn hoàn toàn chính xác, chúng ta cần phải phân biệt giữa chủ đề "bắt đầu" và "không bắt đầu". Chỉ các chủ đề bắt đầu thực sự dự trữ không gian ngăn xếp (như chúng ta có thể mong đợi). Không bắt đầu chủ đề chỉ phân bổ các thông tin theo yêu cầu của một đối tượng thread (bạn có thể sử dụng phản xạ nếu quan tâm đến các thành viên thực tế).
Bạn thực sự có thể kiểm tra nó cho chính mình, so sánh:
static void DummyCall()
{
Thread.Sleep(1000000000);
}
static void Main(string[] args)
{
int count = 0;
var threadList = new List<Thread>();
try
{
while (true)
{
Thread newThread = new Thread(new ThreadStart(DummyCall), 1024);
newThread.Start();
threadList.Add(newThread);
count++;
}
}
catch (Exception ex)
{
}
}
với:
static void DummyCall()
{
Thread.Sleep(1000000000);
}
static void Main(string[] args)
{
int count = 0;
var threadList = new List<Thread>();
try
{
while (true)
{
Thread newThread = new Thread(new ThreadStart(DummyCall), 1024);
threadList.Add(newThread);
count++;
}
}
catch (Exception ex)
{
}
}
Đặt một breakpoint trong ngoại lệ (trong bộ nhớ, tất nhiên) trong VS để xem giá trị truy cập. Dĩ nhiên, có một sự khác biệt rất đáng kể.
Bạn nên sử dụng nhóm chủ đề (hoặc phân phối async, lần lượt sử dụng nhóm luồng) để hệ thống có thể quyết định số lượng chuỗi sẽ chạy.
-1: Thread pool được đề cập trong một số bình luận. –
Câu trả lời * là * để hệ thống quyết định. –
@Ian: Tôi đã bỏ phiếu cho bạn vì cùng một câu trả lời đã được đưa ra chín tháng trước. –
tôi đã thử nghiệm trên hệ thống 64 bit với C# console, ngoại lệ là loại hết bộ nhớ, sử dụng 2949 luồng.
Tôi nhận ra chúng ta nên sử dụng luồng hồ bơi, mà tôi làm, nhưng câu trả lời này là để đáp lại câu hỏi chính;)
- 1. Làm thế nào để đếm số lượng các chủ đề đồng thời trong ứng dụng .NET?
- 2. Số lượng tối đa các chủ đề có sẵn trong Asp.net ThreadPool
- 3. Số lượng chủ đề tối đa trong Windows Server 2003 là bao nhiêu?
- 4. Cách cấu hình số lượng chủ đề tối đa trong Parallel.For
- 5. Số lượng bảng tối đa trong MySQL
- 6. Chủ đề gốc trong ứng dụng .Net
- 7. Số lượng tối đa HttpWebRequests đồng thời
- 8. Số lượng cookie tối đa được phép
- 9. Facebook - số lượng thông số tối đa trong mệnh đề “IN”?
- 10. Số lượng chủ đề tối đa có thể được khởi tạo trong một hạt nhân CUDA đơn lẻ
- 11. Làm thế nào để giới hạn số lượng tối đa của các chủ đề song song trong perl
- 12. Cách đặt chủ đề tối holo trong ứng dụng Android?
- 13. Chủ đề cuối cùng của ứng dụng đa luồng
- 14. LINQ: groupby với số lượng tối đa trong mỗi nhóm
- 15. Số lượng tối đa các quy trình trong linux
- 16. Số lượng đối tượng tối đa trong NSArray
- 17. đặt số lượng tối đa các dòng trong uilabel
- 18. Chức năng PHP - Số lượng đối số tối đa
- 19. Nhật ký sự kiện ứng dụng vượt quá số lượng tối đa cho phép
- 20. Số lượng tối đa cơ sở dữ liệu trong máy chủ sql 2008
- 21. Số lượng tối đa của kết nối cho mỗi máy chủ với twisted.web.client.Agent
- 22. OpenSSL định cấu hình số lượng kết nối tối đa
- 23. Số lượng kết nối đồng thời tối đa trên một cổng (socket) của Máy chủ
- 24. Thu thập dung lượng tối đa trong C#
- 25. Jenkins - số lượng công việc đồng thời tối đa
- 26. Số lượng chủ đề được sử dụng bởi Intel TBB
- 27. Cập nhật giá trị tối đa từ nhiều chủ đề
- 28. Tăng số lượng kết nối tối đa MongoDB
- 29. Có số lượng git stashes tối đa không?
- 30. nhận được lỗi "đạt số lượng kết nối tối đa" với số lượng lớn yêu cầu http trên công cụ ứng dụng google
Câu trả lời sẽ khác nhau nếu bạn đang chạy trên x64 VM hoặc x86 VM –
Trong tình hình của tôi là x86, nhưng bạn có thể cung cấp câu trả lời cho cả hai trong trường hợp người khác cần nó? –