Tôi phát triển khá nhiều trong một thế giới hiệu suất cao đa luồng độc quyền, vì vậy đây là thực tế chung tôi sử dụng.
Thiết tạo mẫu cho việc tối ưu hóa tốt nhất là một thuật toán tốt hơn:
1) Phá vỡ bạn chức năng thành từng miếng một cách logic tách. Điều này có nghĩa rằng một cuộc gọi không "A" và CHỈ "A" - không A sau đó B sau đó C ...
2) KHÔNG CÓ HIỆU ỨNG BÊN: Xóa tất cả các biến toàn cầu trần trụi, tĩnh hay không. Nếu bạn không thể loại bỏ hoàn toàn tác dụng phụ, hãy cô lập chúng ở một vài địa điểm (tập trung chúng vào mã).
3) Làm cho nhiều thành phần bị cô lập RE-ENTRANT càng tốt. Điều này có nghĩa là chúng không có trạng thái phi trạng thái - chúng lấy tất cả các đầu vào của chúng như các hằng số và chỉ thao tác các tham số hằng số hợp lý, DECLARED để tạo ra đầu ra. Vượt qua giá trị thay vì tham chiếu bất cứ nơi nào bạn có thể.
4) Nếu bạn có trạng thái, hãy tách biệt rõ ràng giữa các hội đồng không quốc tịch và máy trạng thái thực tế. Lý tưởng nhất là máy trạng thái sẽ là một hàm duy nhất hoặc lớp điều khiển các thành phần không trạng thái.
Debugging:
lỗi Threading có xu hướng đi trong 2 chủng tộc flavors- rộng và sự bế tắc. Theo quy định, deadlocks có nhiều xác định hơn.
1) Bạn có thấy dữ liệu bị hỏng không?: YES => Có lẽ là một cuộc đua.
2) Có phát sinh lỗi trên MỌI chạy hay chỉ một số lần chạy ?: YES => Có thể là bế tắc (các cuộc đua thường không xác định).
3) Quy trình có treo không ?: YES => Có bế tắc ở đâu đó. Nếu nó chỉ treo đôi khi, bạn có thể có một cuộc đua quá.
Các điểm ngắt thường hoạt động giống như đồng bộ hóa nguyên thủy THEMSELVES trong mã, vì chúng tương tự về mặt logic - chúng buộc thực thi trong ngữ cảnh hiện tại cho đến khi một số ngữ cảnh khác (bạn) gửi tín hiệu tiếp tục. Điều này có nghĩa rằng bạn nên xem bất kỳ điểm ngắt bạn có trong mã như thay đổi hành vi mufti-ren của nó, và breakpoints SILL ảnh hưởng đến điều kiện chủng tộc nhưng (nói chung) không deadlocks.
Theo quy tắc, điều này có nghĩa là bạn nên xóa tất cả các điểm ngắt, xác định loại lỗi, THEN giới thiệu lại chúng để thử và sửa lỗi. Nếu không, họ chỉ đơn giản là bóp méo mọi thứ hơn nữa.
+1 vì tôi nghĩ đây là một câu hỏi tuyệt vời với rất nhiều 'AHA!' - tiềm năng – tr9sh