Nếu bạn viết phần mềm mà khách hàng thanh toán cho số lõi CPU mà phần mềm sử dụng, thì cách tốt nhất để đạt được điều này trong mã C++ của bạn là gì? Nghiên cứu của tôi cho đến nay đã dẫn tôi sử dụng SetProcessAffinityMask
trên Windows và sched_setaffinity
trên các hệ thống POSIX.Đặt hạn ngạch lõi của quá trình bằng C++
Trả lời
Tôi nghĩ rằng bạn đã tìm thấy tùy chọn tốt nhất. Hạn chế số lượng các chủ đề không phải là một ý tưởng tốt nếu bạn muốn tận dụng khả năng của các bộ vi xử lý đa luồng.
"nơi khách hàng thanh toán cho số lượng lõi CPU" đã ngụ ý rằng bạn KHÔNG muốn tận dụng các khả năng đó, KHÔNG BAO GIỜ khách hàng trả tiền. – MSalters
Đó là một câu hỏi thú vị. Tôi không nghĩ rằng tôi có giải pháp hoàn hảo, nhưng vì không có phản hồi cho đến nay, hãy để tôi đề xuất những điều sau đây:
Nếu đoạn chính của chương trình của bạn được thực hiện bởi một loại chuỗi, chỉ cần không sinh ra nhiều chuỗi công nhân hơn giấy phép của khách hàng cho phép. Vì một luồng đơn lẻ không thể được chia để chạy trên nhiều lõi, điều này áp đặt một giới hạn cứng.
(Tôi không nghĩ rằng thiết lập mối quan hệ CPU quá trình là cách để đi vì nó có thể dễ dàng thay đổi khi chạy. Vì nó không yêu cầu bất kỳ kỹ thuật đảo ngược hoặc sửa đổi vĩnh viễn cho hệ thống, tôi sẽ lo lắng rằng circumventing điều này không cảm thấy "xấu" đủ để ngăn chặn ngay cả những khách hàng trung thực khi thử nó.)
Đặt hạn ngạch chuỗi cũng có thể là cách để thực hiện việc này. Khi nói đến những người thay đổi mối quan hệ quá trình trong thời gian chạy, tôi nghĩ rằng đôi khi tôi sẽ kiểm tra mối quan hệ với 'GetProcessAffinityMask' và ném một ngoại lệ cấp phép (thoát) nếu nó đã thay đổi kể từ lần đầu tiên tôi đặt nó trong' main'. –
- 1. Giới hạn hạn ngạch Google Xu hướng
- 2. Ngoại lệ: Lỗi hạn ngạch: Giới hạn tỷ lệ người dùng đã vượt quá
- 3. là gì quá giới hạn hạn ngạch cho gọi Google Contacts v3 API
- 4. Tăng kích thước của hạn ngạch WebSQL trong một WebView
- 5. Quá trình va_args bằng C++
- 6. Cách tìm Hạn ngạch đăng ký Azure
- 7. WCF - Hạn ngạch kích thước thư tối đa cho thư đến đã bị vượt quá
- 8. API Lịch Google tạo ra lỗi "Quota Đã vượt quá", nhưng chưa đạt đến giới hạn hạn ngạch
- 9. Dịch vụ WCF Hạn ngạch chiều dài mảng tối đa (16384) đã vượt quá
- 10. git gc trên máy có hạn ngạch
- 11. Giới hạn hạn ngạch bộ mã hóa địa lý Android
- 12. WCF MaxReceivedMessageSize: hạn ngạch kích thước tin nhắn tối đa vượt quá
- 13. hạn chế băng thông mạng của một quá trình java
- 14. bộ giới hạn bộ nhớ của quá trình trong C (với ngã ba và exec)
- 15. Vùng lõi Linux quá lớn!
- 16. Set MongoDB Cơ sở dữ liệu hạn ngạch (SIZE)
- 17. Phát hiện kích thước khối cho hạn ngạch trong Linux
- 18. Có Git Server Side Hook để đặt hạn ngạch trên kích thước kho lưu trữ không?
- 19. Mỗi quá trình được gắn vào một lõi cụ thể bằng cách lên lịch (Linux)
- 20. hạn ngạch trên api tìm kiếm appengine cho java
- 21. Dữ liệu cốt lõi có áp đặt giới hạn về độ dài của chuỗi không?
- 22. Cách đóng quá trình chạy bằng java?
- 23. Giới hạn và hạn ngạch dung lượng API YouTube quy mô
- 24. WCF Lỗi - Hạn ngạch kích thước tin nhắn tối đa cho tin nhắn đến (65536) đã bị vượt quá
- 25. Điều gì sẽ gây ra quá trình java vượt quá giới hạn Xmx hoặc Xss?
- 26. Quá trình toán tử C++ quá tải
- 27. C#: quá trình đóng trên quá trình của ứng dụng 'giết chết (với taskman)
- 28. WCF Ngoại lệ: Hạn ngạch kích thước tin nhắn tối đa cho tin nhắn đến (65536) đã bị vượt quá
- 29. Giới hạn hạn ngạch 1MB cho đối tượng blobstore trong Google App Engine?
- 30. Hạn chế bộ nhớ quá trình với MaxWorkingSet
câu trả lời True và chi tiết cho câu hỏi của bạn: [1]: http://stackoverflow.com/a/3082553/1848929 – hakiko
@hakiko Đó là câu hỏi về việc tìm ra có bao nhiêu lõi có ... – us2012
On Windows, bạn nên có một cái nhìn tại các đối tượng công việc: http://msdn.microsoft.com/en-us/library/windows/desktop/ms684161(v=vs.85).aspx họ có thể làm nhiều hơn nữa để hạn chế quy trình hơn mối quan hệ. Nhưng chúng cũng có thể giới hạn mối quan hệ: http://msdn.microsoft.com/en-us/library/windows/desktop/ms686216(v=vs.85).aspx –