Які уроки ви засвоїли з проекту, який майже / насправді провалився через погану багатопотоковість?
Іноді, рамка накладає певну модель різьблення, яка ускладнює порядок.
Що стосується мене, я ще не оговтався після останньої невдачі, і я відчуваю, що мені краще не працювати над тим, що стосується багатопотокової роботи в цих рамках.
Я виявив, що мені добре в багатопотокових проблемах, які мають прості вилки / з'єднання, і коли дані рухаються лише в одному напрямку (тоді як сигнали можуть рухатися в круговому напрямку).
Я не в змозі обробити графічний інтерфейс, в якому певна робота може бути виконана лише на строго серіалізованій нитці ("головна нитка"), а інша робота може бути виконана лише на будь-якій потоці, окрім головної нитки ("робочі нитки"), і де дані та повідомлення повинні рухатись у всіх напрямках між N компонентами (повністю пов'язаний графік).
У той час, коли я покинув цей проект для іншого, всюди були проблеми з тупиком. Я чув, що через 2-3 місяці декільком іншим розробникам вдалося виправити всі проблеми з тупиком, до того, що вони можуть бути доставлені клієнтам. Мені ніколи не вдалося з’ясувати той пропавший знання, якого мені бракує.
Щось про проект: кількість ідентифікаторів повідомлень (цілих значень, які описують значення події, яка може бути надіслана до черги повідомлень іншого об'єкта, незалежно від потоку), налічує кілька тисяч. Унікальних рядків (повідомлень користувачів) також налічується близько тисячі.
Додано
Найкраща аналогія, яку я отримав від іншої команди (не пов'язаної з моїми минулими чи теперішніми проектами), - це "занести дані в базу даних". ("База даних" з посиланням на централізацію та атомні оновлення.) У графічному інтерфейсі, який фрагментований на кілька представлень, які працюють на одній "головній нитці", а всі важкі підйоми, що не є GUI, виконуються в окремих робочих потоках, дані програми повинні мати зберігатись в єдиній площині, яка діє як База даних, і нехай "База даних" обробляє всі "атомні оновлення", що включають нетривіальні залежності даних. Всі інші частини графічного інтерфейсу просто обробляють малюнок екрану і більше нічого. Частини користувальницького інтерфейсу можуть кешувати матеріали, і користувач не помітить, якщо він затягся на частку секунди, якщо він розроблений належним чином. Ця "база даних" також відома як "документ" в архітектурі перегляду документів. На жаль - ні, мій додаток насправді зберігає всі дані у Переглядах. Я не знаю, чому так було.
Співробітники:
(учасникам не потрібно використовувати реальні / особисті приклади. Уроки з анекдотичних прикладів, якщо ви вважаєте їх самими достовірними, також вітаються.)