Правильно?

ОС не только процессы раскидывать по процессорам может, но и потоки. Так что можно одним процессом несколько процессоров загрузить.

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

Вот и всё.

Есть ещё, правда, такая штука как виртуальные процессоры. Например интел это называет гиперпоточностью. Идея в том что процессор внутри состоит из многих блоков, выполняющих чётко определённые действия. Поэтому если мне надо сложить два числа в АЛУ, а вам в это же время надо разделить в блоке для обработки чисел с плавающей точкой, то гиперпоточность позволит выполнить код вашего и моего потока параллельно на разных блоках одного процессора из за того что в процессоре поддерживается два указателя команд.

Ответить