Tôi nghĩ rằng công ty của bạn không nên sử dụng đa luồng.
Sau khi thực hiện một dự án đa luồng, tôi thấy có hai kỹ thuật rất quan trọng để khiến mọi thứ hoạt động. Đầu tiên , mã phải được viết đúng. Mỗi trường phải được kiểm tra thủ công để đảm bảo nó được khai báo đúng và được đồng bộ hóa bất cứ nơi nào được tham chiếu. (Cảnh báo:. Tôi đơn giản hóa mọi thứ một chút ở đây để giữ cho trả lời ngắn gọn của tôi - hoặc tại bất kỳ tỷ lệ, ngắn hơn) Thứ hai , mã phải được kiểm tra bằng cách chạy nó ra bằng phẳng trên đơn và đa lõi máy - nhiều phút sử dụng 100% của từng lõi. (Và nếu nó chỉ sử dụng 2% cho mỗi lõi, như nó thường làm với tôi, thì đó cũng là một lỗi.)
Bạn có thể quản lý việc này, nhưng tổ chức của bạn thì không thể. Ngay cả khi họ hiểu vấn đề mà họ không có, họ cũng không có chuyên môn.
Hầu hết các ngôn ngữ cung cấp cách để tránh điều này. Nếu bạn có một đầu đọc ổ cắm, thường có luồng riêng, hãy lấy thông tin đến luồng chính càng nhanh và đơn giản càng tốt. Tốt hơn nữa, hãy tìm các lớp / hàm hệ thống sẽ xử lý phần chủ đề của việc đọc cho bạn. Lần lượt sử dụng một hàng đợi chạy "sự kiện", giống như hầu hết các API GUI. (Sử dụng chính hàng đợi sự kiện của API GUI, cho vấn đề đó.) Nếu bạn cần xử lý song song, có thể bạn có thể tìm thấy một loại "luồng công nhân" nào đó sẽ cho phép bạn giữ dữ liệu / trường trong một luồng, xử lý tất cả các lần chuyển cho bạn.
Nhấn mạnh đến tất cả những nguy hiểm của đa luồng. (Câu chuyện đáng sợ: Lỗi yêu thích của tôi liên quan đến một vài dòng như : int i = 5; i = i * i;
, dẫn đến i
có giá trị 35. Một điều tôi thấy rất nhiều là: if (thing != null) thing.reset();
ném ngoại lệ con trỏ null.) Tôi nghĩ hy vọng duy nhất của bạn là khiến họ hiểu họ bước vào một thế giới hoàn toàn mới, kỳ lạ và có lẽ họ nên lùi một bước lớn.
Tôi không chắc chắn nên xử lý đa luồng như thế nào . Nếu công việc có thể được trao cho một người, và mọi thứ họ làm sẽ bị vứt đi nếu họ thất bại, tốt thôi. Nhưng một nhóm sẽ chỉ mạnh bằng thành viên yếu nhất của mình và ngay cả một lập trình viên giỏi cũng sẽ gặp rắc rối với đa luồng toàn diện. Tôi hy vọng ngôn ngữ mọi người sẽ tìm ra cách để làm cho nó an toàn. Tôi đã thấy một số phần mềm hữu ích ngoài kia. Nhưng tôi nghĩ tốt nhất nên tránh đa luồng trừ khi thời gian thực hiện là rất quan trọng và một lập trình viên giỏi hoặc một nhóm đã được chứng minh là có sẵn.