На главную страницу
Форум txt.version   




Статья :: VB.NET Многопоточные приложения

 

Многопоточные приложения

  • Знакомство с многопоточностью
  • Домены приложений
  • Создание потоков
  • Метод Join
  • Имена потоков, CurrentThread и ThreadState
  • Окно потоков
  • Приостановка потока
  • Завершение или прерывание программных потоков
  • Приостановка и уничтожение потоков
  • Фоновые потоки (демоны)
  • Более серьезный пример: извлечение данных из кода HTML
  • Главная опасность (общие данные)
  • Решение проблемы: синхронизация
  • Команда SyncLock и класс Monitor
  • Взаимная блокировка
  • Совместная работа с данными по мере их создания
  • Многопоточность в графических программах
  • Следующий шаг: кнопка Show Count
  • Почему при многопоточном программировании возникает столько проблем?

Многозадачность в современных операционных системах воспринимается как нечто само собой разумеющееся [ До появления Apple OS X на компьютерах Macintosh не было современных многозадачных операционных систем. Правильно спроектировать операционную систему с полноценной многозадачностью очень трудно, поэтому за основу OS X пришлось взять систему Unix. ]. Пользователь рассчитывает на то, что при одновременном запуске текстового редактора и почтового клиента эти программы не будут конфликтовать, а при приеме электронной почты редактор не перестанет работать. При одновременном запуске нескольких программ операционная система быстро переключается между программами, по очереди предоставляя им процессор (если, конечно, на компьютере не установлено несколько процессоров). В результате создается иллюзия одновременной работы нескольких программ, поскольку даже лучшая машинистка (и самое быстрое Интернет-соединение) не угонится за современным процессором.

Многопоточность (multithreading) в каком-то смысле можно рассматривать как следующий уровень многозадачности: вместо того, чтобы переключаться между разными программами, операционная система переключается между разными частями одной программы. Например, многопоточный почтовый клиент позволяет принимать новые сообщения электронной почты во время чтения или составления новых сообщений. В наше время многопоточность тоже воспринимается многими пользователями как должное.

В VB нормальной поддержки многопоточности не было никогда. Правда, в VB5 появилась одна из ее разновидностей - совместная потоковая модель (apartment threading). Как вы вскоре увидите, совместная модель предоставляет в распоряжение программиста часть преимуществ многопоточности, но не позволяет использовать все возможности в полной мере. Рано или поздно с учебной машины приходится пересаживаться на настоящую, и VB .NET стал первой версией VB с поддержкой свободной многопоточной модели.

Тем не менее многопоточность не принадлежит к числу возможностей, которые легко реализуются в языках программирования и легко осваиваются программистами. Почему?

Потому что в многопоточных приложениях могут возникать очень хитрые ошибки, которые непредсказуемо появляются и исчезают (а такие ошибки труднее всего отлаживать).

Честно предупреждаем: многопоточность - одна из сложнейших областей программирования. Малейшая невнимательность приводит к появлению неуловимых ошибок, на исправление которых уходят астрономические суммы. По этой причине в настоящей главе приведено немало плохих примеров - мы намеренно написали их так, чтобы продемонстрировать характерные ошибки. В этом и состоит самый безопасный подход к изучению многопоточного программирования: вы должны уметь разглядеть потенциальные проблемы, когда на первый взгляд все работает нормально, и знать пути их решения. Если вы хотите использовать приемы многопоточного программирования, без этого не обойтись.

В этой главе будет заложена надежная основа для дальнейшей самостоятельной работы, но описать многопоточное программирования во всех тонкостях мы не сможем - только печатная документация по классам пространства имен Threading занимает более 100 страниц. Если вы захотите освоить многопоточное программирование на более высоком уровне, обращайтесь к специализированным книгам.

Но каким бы опасным ни было многопоточное программирование, при профессиональном решении некоторых задач оно незаменимо. Если ваши программы не будут использовать многопоточность там, где это уместно, пользователи сильно разочаруются и предпочтут другой продукт. Например, лишь в четвертой версии популярной почтовой программы Eudora появились многопоточные возможности, без которых невозможно себе представить ни одну современную программу для работы с электронной почтой. К тому времени, когда в Eudora появилась поддержка многопоточности, многие пользователи (в том числе и один из авторов этой книги) перешли на другие продукты.

Наконец, в .NET однопоточных программ просто не бывает. Все программы .NET являются многопоточными, поскольку сборщик мусора выполняется как низкоприоритетный фоновый процесс. Как показано ниже, при серьезном графическом программировании в .NET правильное взаимодействие программных потоков помогает предотвратить блокировку графического интерфейса при выполнении программой продолжительных операций.

 

VB.NET Многопоточные приложения

страницы в данном разделе 
 VB.NET Многопоточные приложения  VB.NET Знакомство с многопоточностью
 VB.NET Создание потоков  VB.NET Метод Join
 VB.NET Приостановка и уничтожение потоков  VB.NET Главная опасность (общие данные)
 VB.NET Решение проблемы: синхронизация  VB.NET Взаимная блокировка
 VB.NET Совместная работа с данными по мере их создания  VB.NET Многопоточность в графических программах
 VB.NET Следующий шаг: кнопка Show Count  VB.NET Глава 10. Многопоточные приложения


Разделы
Околокомпьютерная литература (375)
Программирование (102)
Программы (75)
ОС и Сети (49)
Интернет (29)
Аппаратное обеспечение (16)
Базы данных (6)

Содержание сайта (выборка)
Apache
Протоколы TCP/IP (принципы, протоколы и архитектура)

PHP, PELR, JSP
PHP
JavaServer Pages (JSP)

Базы данных
Основы mysql
СУБД INFORMIX
СУБД POSTGRES
Основы проектирования реляционных баз данных

HTML, javascript
Спецификация HTML 4.01
Каскадные Таблицы Стилей, Уровень 2
Клиентский JavaScript. Справочник.
JavaScript руководство пользователя
Серверный JavaScript 1.4. Руководство по Использованию.

Паскаль, C, C++, C#
GCC (примеры)
FAQ Валентинa Озеровa DELPHI
C





 
©  programming-lang.com  справочник программиста