2011-10-27 27 views
6

Tôi biết các thuật ngữ này được sử dụng trong ngữ cảnh thành tích hiệu suất. Những ngày này tôi đang làm việc trên đó, và đã cố gắng để biết về những từ internet nhưng không nhận được bất kỳ ví dụ mà trình bày rõ ràng các khái niệm này với sự tồn tại của các vấn đề/khái niệm trong các kịch bản phát triển thực tế. Ai đó có thể giải thích kỹ lưỡng các thuật ngữ này, các tình huống ví dụ và nơi các khái niệm và thuật ngữ này có thể được sử dụng.Mã Boilerplate, mã nóng và điểm nóng là gì?

Cảm ơn.

+1

Một câu hỏi cho các lập trình viên stack? – Wivani

Trả lời

14

"Boilerplate" không có gì liên quan đến hiệu suất: nó chỉ có nghĩa là mã chuẩn được yêu cầu để xác định ứng dụng hoặc làm việc với một số khung công tác. Đó là mã có thể giống hệt nhau trong mọi ứng dụng.

Một "điểm nóng", mặt khác, có nghĩa là một phần của mã được thực thi nhiều lần và do đó hiệu suất của nó rất quan trọng đối với hiệu suất ứng dụng tổng thể. Thông thường một điểm nóng được xác định bởi hồ sơ thực tế: nó không phải là một điểm nóng nếu nó được thực hiện nhiều lần nhưng là như vậy tầm thường rằng tác động của nó về hiệu suất là tối thiểu.

4

Boilerplate code

"mã nóng" là khả năng mở rộng cũng viết code

"điểm nóng" là một lĩnh vực hoạt động mãnh liệt. Chúng là điểm nóng bởi vì chúng thường xuyên được thực thi mã.

2

Một định nghĩa về "điểm nóng" là một khu vực mã nơi bộ đếm chương trình dành một phần nhỏ thời gian của nó. Thuật ngữ có liên quan là "nút cổ chai", trong khi không xác định, thường đề cập đến mã được bản địa hóa thành hàm, thường trình hoặc phương pháp, làm cho phần thời gian cao hơn chi tiêu cần thiết.

Cả hai thuật ngữ này đều rất gây hiểu nhầm, bởi vì có một giả định không được thừa nhận rất lớn. Giả thiết là không có cơ hội để tăng tốc một chương trình không phải là điểm nóng hoặc nút cổ chai. Cơ hội tăng tốc có thể khuếch tán hơn thế và nếu chúng không được tìm thấy và cố định, chúng sẽ trở thành giới hạn hiệu suất.

Hãy để tôi đưa ra một ví dụ. Gần đây, khi làm việc trên một chương trình C++ khoảng 300 dòng, tôi đã lấy số stackshots, bởi vì tôi muốn xem làm thế nào tôi có thể tăng tốc nó lên. Bốn trong số các ảnh chụp nhanh đó trông giống như sau:

CTypedPtrArray<CPtrArray,COperation *>::operator[]() line 1555 + 23 bytes 
TcProcess() line 246 + 14 bytes ---> COperation* pOp = oplist[i]; 
CMhAck::Handler() line 165 
doit() line 297 + 12 bytes 
main() line 318 

CTypedPtrArray<CPtrArray,CJob *>::operator[]() line 1555 + 23 bytes 
SchProcess() line 212 + 14 bytes ---> pJob = joblist[i]; 
COpAck::Handler() line 145 
doit() line 297 + 12 bytes 
main() line 318 

CTypedPtrArray<CPtrArray,CTask *>::operator[]() line 1555 + 23 bytes 
TcProcess() line 249 + 18 bytes ---> pTask = pOp->tasks[pOp->iCurTask]; 
CMhAck::Handler() line 165 
doit() line 297 + 12 bytes 
main() line 318 

CTypedPtrArray<CPtrArray,CTask *>::operator[]() line 1555 + 23 bytes 
COperation::~COperation() line 57 + 15 bytes ---> CTask* p = tasks[i]; 
COperation::`scalar deleting destructor'() + 37 bytes 
TcProcess() line 259 + 28 bytes 
CTskAck::Handler() line 193 
doit() line 297 + 12 bytes 
main() line 318 

Chương trình mất 20 giây tổng thể. Những mẫu ngăn xếp nào nói với tôi là khoảng 40% thời gian đó, hoặc 8 giây, được sử dụng trong toán tử lập chỉ mục trên lớp mảng. Điều đó cho tôi biết tôi có thể giảm thời gian chạy từ 20 giây xuống còn 12 giây, cho hay thực hiện, nếu tôi có thể lập chỉ mục trực tiếp hơn, không thông qua một cuộc gọi chức năng. Tăng tốc sẽ là 20/12 = 1,67 hoặc tăng tốc 67%. (Lưu ý: Tôi không đưa ra một kêu về "chính xác" khi nói đến thời gian Những gì tôi muốn làm là tìm ra vấn đề..)

Bây giờ người ta có thể dễ dàng đồng ý với phương pháp sửa chữa các vấn đề , nhưng bạn có thể thấy cách tôi phát hiện vấn đề là gì, phải không?

OK, vậy đâu là "điểm phát sóng" và "nút cổ chai" ở đâu? Rõ ràng có một điểm phát sóng trong hàm toán tử lập chỉ mục, nhưng đó có phải là vấn đề không? (Trên thực tế nó không phải là ngay cả, bởi vì nó là ba chức năng khác nhau.) Điều đó có nghĩa là tôi nên cố gắng làm cho thói quen đó nhanh hơn? Tôi thậm chí không sở hữu nó!

Có nút cổ chai dưới dạng một số "thói quen chậm" không? Không! Không có thói quen cụ thể nào chậm hoặc "thuật toán xấu".

Điều tôi đã làm là tạo ra một mô tả về những gì nó đang làm ("Nó đang lập chỉ mục trong các quy trình nhất định"). Mô tả đó áp dụng một phần lớn thời gian.

Thời hạn tốt nhất tôi có thể nghĩ ra cho những điều này là "rút ngắn thời gian", bởi vì nó dành một phần lớn thời gian làm những việc không thực sự phải được thực hiện.

More about terminology and popular misconceptions.

Các vấn đề liên quan