Tôi đang viết một số mã sinh ra khá nhiều chủ đề (khoảng 512 vào lúc này, nhưng điều đó có thể cao hơn trong tương lai). Mỗi chủ đề chỉ thực hiện một số lượng nhỏ các hoạt động, vì vậy tôi muốn các chi phí mà các chủ đề đặt trên hệ thống được giữ ở mức tối thiểu.Kích thước ngăn xếp của chủ đề an toàn?
Tôi đang đặt kích thước ngăn xếp bằng cách sử dụng pthread_attr_setstacksize()
và tôi có thể nhận kích thước ngăn xếp tối thiểu cho phép từ PTHREAD_STACK_MIN
. Nhưng câu hỏi của tôi là: Có an toàn khi sử dụng PTHREAD_STACK_MIN
cho kích thước ngăn xếp của luồng không? Làm cách nào để tính toán số lượng ngăn xếp tôi cần? Có bất kỳ chi phí ẩn nào mà tôi sẽ cần phải thêm vào tính toán của tôi không?
Ngoài ra, còn có bất kỳ kỹ thuật nào khác mà tôi có thể sử dụng để giảm gánh nặng của luồng trên hệ thống không?
Cảm ơn Matt. Tôi nghĩ điều này gần nhất với câu trả lời tôi là Sau. Tôi đã hy vọng rằng ai đó sẽ nói "thêm sizeof() của tất cả các biến cục bộ của bạn, thêm 42 byte cho phí trên luồng và sau đó thêm 10% cho may mắn", nhưng có vẻ như có nhiều khả năng hơn lúc chơi. Cảm ơn những lời khuyên về các ưu tiên và đình chỉ. –
@ ltn100: không, nó giống như "kiểm tra kỹ lưỡng mã của bạn với kích thước ngăn xếp được chỉ định, trong bối cảnh gỡ lỗi sẽ phát hiện tràn. Sau đó, thêm 10% cho may mắn". –
@ ltn100: Nếu bạn có thể tìm thấy công cụ gỡ lỗi thực sự đo lường việc sử dụng ngăn xếp nước cao trên nền tảng của mình, điều đó tốt, nhưng nền tảng nơi bạn thực sự cần thực hiện điều này (vì stack là RAM vật lý phía trước) những người có công cụ gỡ lỗi tốt nhất. Và bạn phải * thực sự * kỹ lưỡng với thử nghiệm. Bất kỳ điều nhỏ nào, bao gồm các thay đổi đối với các thư viện mà bạn liên kết động hoặc các biến môi trường mà chúng nhìn vào, hoặc (theo nghĩa đen) vào ngày trong tuần, có thể làm tăng dấu nước cao của bạn. Tránh VLAs, tránh mọi đệ quy phụ thuộc vào dữ liệu đầu vào. –