Правильно?
ОС не только процессы раскидывать по процессорам может, но и потоки. Так
что можно одним процессом несколько процессоров загрузить.
Понимать тут особо нечего. Можно рассмотреть систему где есть только не
больше двух выполняющихся потоков:
1) Один поток НЕ МОЖЕТ выполняться одновременно на двух процесоорах.
2) Каждый процесс состоит из как минимум одного потока, поэтому грубо
говоря два подключения к классику - это два процесса и два потока.
3) Два потока МОГУТ выполняться на двух процессорах одновременно если
они не блокируют друг друга. Потоки процессов классика не бллокируют
друг друга, а потоки суперсервера в текущей реализации блокируют (в IB 7
и вулкане уже не блокируют).
4) Програмно есть возможность при запуске потока указать процессоры на
которых он может выполняться (по-моему :-) ), но в FB такая привязка
реализована для всех потоков сразу, т.е. нельзя к примеру указать что
сборщик мусора должен работать на одном процессоре, а другие подключения
на остальных. Иными словами можно определить набор процессоров на
которых серверу позволительно запускать ЛЮБЫЕ потоки. Какой поток на
каком из этих процессоров выполнять решает ОС по своим алгоритмам и вы
никак не можете этим управлять.
5) Взаимодействие потоков, использующих один и тот же ресурс, требует
дополнительных действий для синхронизации. Это является одной из причин
того что производительность не растёт пропорционально с увеличением
количества процессоров. Поэтому если у вас допустим двухпроцессорный
сервер, на котором крутиться например FB и сервер приложений (или
веб-сервер) и на сервер приложений приходятся значительные нагрузки, то
имеет смысл попробовать привязать FB к одному процессору, а сервер
приложений к другому. Мы у себя так и сделали.
Вот и всё.
Есть ещё, правда, такая штука как виртуальные процессоры. Например интел
это называет гиперпоточностью. Идея в том что процессор внутри состоит
из многих блоков, выполняющих чётко определённые действия. Поэтому если
мне надо сложить два числа в АЛУ, а вам в это же время надо разделить в
блоке для обработки чисел с плавающей точкой, то гиперпоточность
позволит выполнить код вашего и моего потока параллельно на разных
блоках одного процессора из за того что в процессоре поддерживается два
указателя команд.