1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wizardforcel-thinking-in-java-zh

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
14.6 总结.md 8.9 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 11.03.2025 09:15 d56454c

14.6 Заключение

Понимание того, когда следует использовать многопоточность, а когда лучше от неё отказаться, является важной темой для освоения. Основная цель использования многопоточности — управление множеством задач в порядке, который позволяет эффективнее использовать вычислительные ресурсы или сделать работу пользователя более удобной. Классическая проблема балансировки ресурсов заключается в том, как использовать процессор во время ожидания ввода/вывода. Что касается удобства пользователя, то наиболее типичным примером является возможность мониторинга долгого процесса загрузки и быстрого реагирования на нажатие кнопки "Стоп" (stop).

Основные недостатки многопоточности включают:

(1) Увеличение времени выполнения программы при ожидании доступа к общим ресурсам.

(2) Дополнительные затраты процессора на управление потоками.

(3) Незначительно усложняется сложность реализации, например, использование отдельного потока для обновления каждого элемента массива.(4) Долгое ожидание, бесполезная борьба за ресурсы и симптомы мертвых琐事,如死锁等多线程症状。

Кроме вышеупомянутых недостатков, одним преимуществом потоков является использование легковесной переключаемости контекста (приблизительно 100 команд), а не тяжёлой переключаемости процессов (приблизительно 1000 команд). Поскольку все потоки одного процесса используют общую память, легковесная переключаемость контекста меняет лишь путь выполнения программы и локальные переменные. В то время как тяжёлая переключаемость контекста требует полного переключения всей памяти.

Обработка потоков может показаться как вход в совершенно другой мир, будто требуется изучение нового программирования языка — или, по крайней мере, новой серии концепций. Так как большинство микрокомпьютерных операционных систем поддерживают потоки, язык программирования или библиотека также будут содержать расширения, связанные с потоками. Независимо от того, где это происходит, программа, связанная с потоками, столкнётся со следующими ситуациями:

(1) На начальном этапе она может вызвать путаницу и потребовать изменения привычного подхода к программированию;

(2) Поддержка потоков другими языками кажется схожей. Поэтому, после понимания концепции потока, трудностей в других средах не будет много. Хотя поддержка потоков увеличивает сложность Java-языка, это не является ошибкой самой Java. В конце концов, использование потоков позволяет выполнять множество полезных задач.Множество потоков может совместно использовать один и тот же ресурс (например, память внутри объекта), что представляет собой одну из главных трудностей при работе с потоками. Нужно гарантировать, что несколько потоков не пытаются одновременно считывать и модифицировать этот ресурс. Для этого используется ключевое слово synchronized. Это полезный инструмент, но важно правильно им управлять, чтобы избежать возникновения мёртвых琐事(deadlocks)。此外,在使用线程时需要注意一个非常特定的问题。由于Java的设计,它可以创建任意数量的线程以满足需求——尽管理论上这可能是可行的(例如,为最终元素分析项目创建数百万个线程;但这在实际中对于Java来说并不现实)。然而,通常需要控制创建线程的最大数量。在某些情况下,大量的线程可能会导致混乱的状态,从而减慢系统的运行速度。关键点不是达到数千个对象,而是低于一百个。我们通常只创建几个关键线程来解决具体任务,其中线程的数量限制并不是主要问题。但在更典型的项目设计中,这一限制确实成为一个障碍。Необходимо также обратить внимание на одну неочевидную проблему при работе с потоками. Из-за механизма "планирования" потоков, вызов sleep() внутри основного цикла метода run(), как правило, позволяет сделать программу быстрее. Это требует высокого уровня навыков программирования, особенно когда короткие задержки кажутся повышающими производительность. Причиной этого явления является то, что до момента, когда работающий поток готовится перейти в состояние "сон", короткая задержка может прерывать механизм планирования завершения sleep(). Это заставляет механизм планирования прекратить выполнение текущего потока и затем возобновить его позже, чтобы он смог завершить свою работу перед переходом в состояние "сон". Нужно хорошенько подумать, чтобы осознать всю сложность этой проблемы.Одним из недостатков данного раздела является отсутствие примера анимации, которая стала одной из самых популярных областей применения современного программирования. Тем не менее, Java JDK предлагает полный набор решений для этой проблемы (включая воспроизведение звука), доступный для скачивания с демонстрационной области сайта java.sun.com. Кроме того, можно рассчитывать на лучшую поддержку анимации в будущих версиях Java, хотя в настоящее время Интернет предлагает множество альтернативных, не использующих Java и не являющихся программными, способов создания анимации. Для систематического изучения принципов работы анимации в Java рекомендуются книги "Core Java" (Основы Java) авторства Cornell & Horstmann, издательство Prentice-Hall, 1997 год; "Concurrent Programming in Java" (Параллельное программирование на Java) авторства Doug Lea, издательство Addison-Wesley, 1997 год; или "Java Threads" (Java потоки) авторства Oaks & Wong, издательство O'Reilly, 1997 год.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/wizardforcel-thinking-in-java-zh.git
git@api.gitlife.ru:oschina-mirror/wizardforcel-thinking-in-java-zh.git
oschina-mirror
wizardforcel-thinking-in-java-zh
wizardforcel-thinking-in-java-zh
master