Потоки

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

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

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

Разумеется в современных ОС есть возможность не использовать многопотоковость и реализовать параллельную логику в разных процессах. Но при этом возникают накладные расходы:

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

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

Оставить комментарий

Можно использовать теги: <a href="" rel="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>