поточність
Звідки вся суєта щодо багатопотокового режиму, якщо він включає так багато потенційної небезпеки? Тому що, в деяких ситуаціях, багато-режим може значно покращувати ефективність програми. У деяких випадках це може покращувати ефективність деяких операцій синхронізації типу очікування завершення програми. Це дозволяє зробити архітектуру програми більш гнучкою. Наприклад, операція Add a long у формі MTDEMO2 з наступним кодом:
Private Sub cmdLongOp_Click ()
Dim l &
Dim s $
For l = 1 To 1000000
s = Chr $ (l And & H7F)
Next l
End Sub
Запустіть кілька примірників форми, використовуючи кнопку cmdLaunch1. Коли Ви натискаєте на кнопку cmdLongOp на будь-який з форм, то побачите, що це дія заморожує операції на всіх інших формах. Так відбувається, тому що всі форми виконуються в одиночному потоці - і цей потік зайнятий виконанням довгого циклу. Якщо Ви запустіть кілька екземплярів форми кнопкою cmdLaunch2 і нажімете кнопку cmdLongOp на форму, то тільки ця форма буде заморожена - інші форми будуть активними. Вони виконуються у власних потоках, і довгий цикл буде виконуватися тільки у власному потоці. Звичайно, в будь-якому випадку, Ви ймовірно не повинні розміщувати тривалі операції такого типу у ваших формах.
Далі короткий резюме, коли важливий багато-режим:
Сервер ActiveX EXE - без загальних ресурсів. p> Коли Ви маєте ActiveX EXE сервер, який Ви збираєтеся спільно використовувати серед декількох додатків, багато-режим запобігає програми від небажаних взаємодій з один одним. Якщо один додаток виконує довгу операцію на об'єкті в однопотоковому сервері, інші додатки будуть витіснені, тобто чекатимуть, коли звільниться сервер. Багато-режим рещается цю проблему. Однак, є випадки, де Ви можете хотіти використовувати ActiveX EXE сервер, щоб регулювати доступ до загальнодоступних ресурсів (shared resource). Наприклад, сервер stock quote, описаний у моїй книзі Developing ActiveX Components. У цьому випадку сервер stock quote виконується в одиночному потоці і що доступний для всіх додатків, що використовують сервер по черзі.
Багатопотоковий клієнт - виконуваний як ActiveX EXE сервер
Проста форма цього підходу продемонстрована в додатку MTDEMO2. Цей підхід використовується, коли додаток підтримує множинні вікна, які повинні виходити з однієї програми, але працювати повністю незалежно. Інтернет-браузер - гарний приклад такого багатопотокового клієнта, де кожне вікно виконується у власному потоці. Тут слід звернути увагу на те, що багато-режим не повинен використовуватися як заміна для гарного подієво керованого проекту.
Багатопотокові сервери DLL або EXE
В архітектурі клієнт-сервер, багато-режим може збільшити ефективність, якщо Ви маєте суміш довгих і коротких клієнтських запитів. Будьте уважним, хоча - Якщо всі ваші клієнтські запити мають подібну довжину, багато-режим може фактично сповільнювати серед...