Tôi đã chơi đùa với luồng, cố gắng đẩy một số giới hạn đến mức cực đoan - vì sự thích thú của riêng tôi. Tôi biết các threadpool mặc định là 25 chủ đề và có thể được đẩy lên đến 1000 (theo MSDN). Điều gì mặc dù, là giới hạn thực tế của các chủ đề cho mỗi lõi CPU? Tại một số điểm, bối cảnh chuyển đổi sẽ gây ra nhiều hơn một nút cổ chai hơn luồng tiết kiệm. Có ai có bất kỳ thực hành tốt nhất bao gồm điều này? Chúng ta đang nói 100, 200, 500? Liệu nó phụ thuộc vào những gì các chủ đề đang làm gì? Điều gì quyết định, khác với kiến trúc khung chính tả bao nhiêu chủ đề hoạt động tối ưu cho mỗi lõi CPU?Giới hạn chủ đề thực tế cho mỗi CPU là bao nhiêu?
Trả lời
Tất cả phụ thuộc vào những gì các chủ đề đang làm, tất nhiên. Nếu họ là CPU-ràng buộc (nói ngồi chặt chẽ trong một vòng lặp vô hạn) sau đó một sợi cho mỗi lõi sẽ là đủ để bão hòa CPU; nhiều hơn thế (và bạn sẽ có nhiều hơn, từ các quá trình nền, v.v) và bạn sẽ bắt đầu tranh luận. Mặt khác, nếu các chủ đề không đủ điều kiện để chạy (ví dụ như bị chặn trên một số đối tượng đồng bộ hóa), thì giới hạn số lượng bạn có thể được quyết định bởi các yếu tố khác ngoài CPU (bộ nhớ cho ngăn xếp, Giới hạn nội bộ của hệ điều hành, v.v.)
Nếu ứng dụng của bạn không bị ràng buộc CPU (như phần lớn), thì công tắc ngữ cảnh không phải là vấn đề lớn bởi vì mỗi lần ứng dụng của bạn phải đợi, cần chuyển ngữ cảnh. Vấn đề có quá nhiều luồng là về cấu trúc dữ liệu OS và một số dị thường đồng bộ hóa như đói, nơi mà một luồng không bao giờ (hoặc rất hiếm khi) có cơ hội thực thi do ngẫu nhiên các thuật toán đồng bộ hóa.
Nếu ứng dụng của bạn là CPU bị ràng buộc (vẫn còn 99% thời gian làm việc trên bộ nhớ, rất hiếm khi I/O hoặc chờ một thứ khác như đầu vào của người dùng hoặc chuỗi khác), thì tối ưu sẽ là 1 luồng cho mỗi lõi logic , bởi vì trong trường hợp này sẽ không có chuyển đổi ngữ cảnh.
Hãy coi chừng rằng hệ điều hành ngắt chuỗi mỗi lần, ngay cả khi chỉ có một luồng cho nhiều CPU. Hệ điều hành không chỉ chuyển đổi các chủ đề, mà còn cho các mục đích quản lý luồng (như cập nhật các bộ đếm để hiển thị trên Trình quản lý tác vụ hoặc để cho phép một siêu người dùng loại bỏ nó).
Giả sử bạn đang thực hiện dòng công việc kinh doanh thông thường, như nhận dữ liệu ổ cắm và truyền ở tốc độ cao vào cơ sở dữ liệu của một số mô tả - vì SQL Server đối số. Về mặt lý thuyết, .NET sẽ không xử lý I/O theo đúng nghĩa - nó có thể bán SqlBulkCopy thành SQL Server. – BobTheBuilder
Chỉ bằng cách chạy hệ điều hành, đã có rất nhiều chủ đề nổi xung quanh. Vì vậy, một sợi cho mỗi lõi là tối ưu có, nhưng nó chỉ không bao giờ xảy ra trong thực tế. Tôi không biết điểm là gì để biết số lượng luồng tối ưu cho mỗi lõi .... ứng dụng của bạn không phải là ứng dụng duy nhất chạy. –
@Joel Gauvreau Gọi nó là sự tò mò. Đó không phải là lý do tại sao chúng tôi kết thúc trong công việc này ngay từ đầu. Khát khao kiến thức và hiểu biết ... vì vậy câu trả lời của tôi cho "điểm cần biết là gì?" là "chỉ cần biết." – BobTheBuilder
- 1. Máy chủ SQL: Giới hạn số UNION là bao nhiêu?
- 2. Giới hạn bộ nhớ tối đa cho mỗi ứng dụng cho Android 2.2 là bao nhiêu?
- 3. SQLite: giới hạn thực tế là gì?
- 4. Giới hạn tối ưu cho độ dài URL là bao nhiêu? 100, 200+
- 5. Có bao nhiêu lần tham gia cho mỗi chức năng trong ứng dụng thế giới thực?
- 6. Hạn ngạch thiết bị mỗi ngày cho Android c2dm là bao nhiêu?
- 7. Giới hạn kích thước cho một lớp học là bao nhiêu?
- 8. Giới hạn độ dài của thẻ META HTML là bao nhiêu?
- 9. Có bao nhiêu byte cho mỗi inode?
- 10. Có bao nhiêu tham gia khả thi trong thực tế
- 11. Đăng ký Cuda cho mỗi chủ đề
- 12. Hạn chế thực tế của bộ nhớ JVM và mức sử dụng CPU?
- 13. Bao nhiêu dữ liệu cho mỗi nút trong cụm Cassandra?
- 14. Số tệp tối đa trên mỗi bình là bao nhiêu?
- 15. Giới hạn về độ dài của thuộc tính javascript là bao nhiêu?
- 16. Giới hạn thực tế về số luồng trong Linux trong khung hợp tác
- 17. Android tôi có thể đi bao nhiêu chủ đề?
- 18. Giới hạn thực tế về số lượng các phiên bản FileSystemWatcher mà máy chủ có thể xử lý là gì?
- 19. Chủ đề trên mỗi Bộ xử lý
- 20. Một SQLiteConnection cho mỗi chủ đề?
- 21. lõi CPU vs chủ đề
- 22. Có bao nhiêu lõi CPU có dyno heroku?
- 23. Giới hạn số lượng chủ đề thực hiện một phương thức tại một thời điểm
- 24. Phiên Meteor bao nhiêu là
- 25. Số tham số tối đa được phép cho mỗi loại nhà cung cấp cơ sở dữ liệu là bao nhiêu?
- 26. Hồ sơ Xdebug tiết lộ bao nhiêu thời gian thực thi thực tế?
- 27. Giới hạn thực tế của cơ sở dữ liệu SQL-Server
- 28. "Chi phí" thô của Chủ đề trong chu trình và bộ nhớ CPU là gì?
- 29. Số chủ đề cao nhất hợp lý để chạy đồng thời trong Jmeter là bao nhiêu?
- 30. Cách sử dụng CPU cho mỗi quy trình trong Python
http://stackoverflow.com/questions/1718465/optimal-number-of-threads-per-core - điều này có thể trả lời một số truy vấn trong khi bạn chờ câu trả lời ở đây :) – dotalchemy
@dotalchemy - cảm ơn, thông tin giai thoại thường là khá hữu ích; Có một số hiểu biết tốt ở đó. Sẽ rất thú vị nếu xem có ai nêu ra thông tin liên quan đến các phương pháp hay nhất hay không. – BobTheBuilder
42. Tất nhiên ... –