Многопоточность – это функция, используемая для обработки параллельных запросов с целью максимальной эффективности. Выполнение одного фрагмента кода за раз может работать для легковесных программ, но может действительно заглушить систему, если нужно сделать что-то тяжелое. Один из способов думать об этом – это если вы ведете машину вверх по склону, где есть только одна полоса движения. Если бы по дороге ехали только легковые автомобили с нормальной скоростью, то это, вероятно, не было бы проблемой. Однако, если бы впереди вас был полуприцеп, потребовалась бы целая вечность, чтобы преодолеть холм. Многопоточность имеет схожие концепции с созданием двух полос движения на дороге. С двумя полосами движения автомобили могут двигаться с разной скоростью рядом друг с другом, и полуприцеп не замедляет поток движения.
На самом деле потоки немного сложнее. Поток – это контекст выполнения, который представляет собой информацию, необходимую процессору для выполнения и отслеживания списка инструкций. Контекст выполнения содержит местоположения регистров, где следующая строка инструкций ожидает своей очереди. Процессоры создают иллюзию, что они выполняют несколько вычислений одновременно, но многие вещи запускаются и останавливаются очень быстро.
Немного уменьшив масштаб, вы можете увидеть на изображении выше, что потоки являются частью процесса. Процесс – это экземпляр выполняемой программы. Потоки составляют состояние процесса процесса и содержат информацию, необходимую для отслеживания того, что еще необходимо вычислить в программе. Процесс также содержит другие ресурсы, такие как код, данные, куча и стек. Некоторые из этих ресурсов являются общими, в то время как другие могут быть специфичны для конкретного потока.
Теперь, как и все в программировании, если это такой большой толчок к повышению эффективности, почему бы нам не применить это ко всему? Потоки оказывают минимальное влияние, требуют меньших накладных расходов для создания/обслуживания/управления и могут обеспечить упрощение структуры. Однако их гораздо сложнее реализовать. Они также вызывают проблемы с параллелизмом. Программист не знает, какой порядок операций будут выполнять потоки, поэтому необходимо принять меры предосторожности, чтобы гарантировать достоверность данных. Без защиты один поток может манипулировать данными, что приведет к их повреждению для вычислений другими потоками.
Теперь, когда у нас есть понимание того, что такое многопоточность, на следующей неделе мы обсудим, как ее реализовать на Java! Я надеюсь, что у вас у всех отличная неделя, и не стесняйтесь оставлять комментарии и лайки к этому посту.
Ресурсы:
Оригинал: “https://dev.to/jryther/understanding-threading-5c9o”