Можно ли запустить 10 процессов на одноядерном процессоре?

Ответ

Да, безусловно можно. Это одна из фундаментальных задач операционной системы (ОС).

Это возможно благодаря механизму вытесняющей многозадачности (preemptive multitasking), который создает иллюзию параллельного выполнения нескольких задач на одном ядре CPU.

Как это работает

  1. Планировщик ОС (OS Scheduler): Это компонент ядра ОС, который управляет очередью процессов, готовых к выполнению.
  2. Квант времени (Time Slice): Каждому процессу выделяется небольшой промежуток времени (квант) для работы на CPU.
  3. Переключение контекста (Context Switch): Когда квант времени процесса истекает (или процесс уходит в ожидание ввода/вывода), планировщик:
    • Сохраняет текущее состояние процесса (значения регистров, счетчик команд и т.д.).
    • Загружает состояние следующего процесса из очереди.
    • Передает управление новому процессу.

Этот процесс происходит очень быстро (тысячи раз в секунду), поэтому у пользователя создается впечатление, что все 10 процессов работают одновременно.

Конкурентность vs Параллелизм

Важно различать эти понятия:

  • Конкурентность (Concurrency): Управление несколькими задачами в один и тот же период времени. Это то, что происходит на одноядерном CPU. Задачи выполняются попеременно.
  • Параллелизм (Parallelism): Реальное одновременное выполнение нескольких задач. Для этого требуется многоядерный процессор (>1 ядра).

Пример на Bash

Этот скрипт запустит 10 фоновых процессов sleep, которые будут "выполняться" одновременно на одном ядре:

#!/bin/bash

echo "Запускаем 10 фоновых процессов..."
for i in {1..10}
do
  # Запускаем команду sleep в фоновом режиме с помощью '&'
  sleep 10 &
  echo "Процесс $i запущен с PID $!"
done

# Команда 'ps' покажет все запущенные процессы
ps -ef | grep sleep

# Ожидаем завершения всех фоновых задач
wait
echo "Все процессы завершились."