Кайрат-F2 » 14 дек 2010, 17:09
Помню, когда СОНО только запустили, было много претензий, что СОНО работает медленно, тормозит даже на современных компьютерах. При этом часто фразы начинаются с текста "у меня двухядерный компьютер, два гигабайта памяти, а СОНО всё равно тормозит".
Пришла пора рассказать о том, как СОНО работает на компьютерах с разным количеством ядер. Если честно, то это не совсем миф. Действительно, СОНО выполняет свои операции медленнее, чем предыдущие программы (ЭФНО, ИСИД, НДС, СГДС). Просто потому что СОНО требуется больше операций выполнять, чем старым программам.
Но простой заменой процессора здесь нельзя решить. СОНО использует и нагружает различные элементы компьютера. Это в первую очередь: процессор, оперативная память, жесткий диск, локальная сеть и т.д. Тут я позволю себе рассказать как можно проще несколько сложных технических деталей. Кому-то это известно, для других темный лес.
Давайте разберемся с одним частым заблуждением: процессор, это вовсе не та большая железная коробка с проводами, куда подключен монитор и остальные комплектующие. Эта коробка называется "системный блок". А процессор это лишь небольшая, но видимо самая главная составная часть системного блока.
Задачами процессора является выполнение операций. До недавнего времени процессоры были одноядерными, т.е. одновременно могла выполняться лишь одна задача. Когда, например, на Вашем компьютере запущен Word, антивирус, 1С и СОНО, то компьютер все задания передает по очереди процессору и тот сначала выполняет маленькую операцию из Word, потом из антивируса, потом из 1С ну и, наконец, из СОНО. И так по кругу. В итоге, кажется, что они выполняются одновременно. При этом СОНО в силу своих особенностей требует выполнения большого количества операций.
Ядром процессора называется та его часть, которая может выполнять задачи.
Раньше, когда процессоры были одноядерными, то все задачи и программы на компьютере конкурировали между собой за одно ядро процессора. Каждая программа это набор маленьких операций. И чем больше операций надо выполнить, тем сильнее нагружается процессор и это одно ядро. В результате если запустить какую-нибудь тяжелую программу, у которой надо выполнить много операций, то процессор сильно нагружается и остается мало возможностей для выполнения операций других программ.
В итоге, когда запускаете СОНО на одноядерном компьютере, то и СОНО начинает тормозить, и остальные программы стоят в очереди, когда процессор освободится, чтобы выполнить их операции. Результат: на одноядерных компьютерах если начинает тормозить СОНО, то и остальные программы тоже начинают тормозить.
Какой вывод можно сделать: если Вы хотите, чтобы СОНО работала чуть быстрее, то рекомендуется закрыть как можно больше программ, тогда процессор будет быстрее обрабатывать операции СОНО.
Теперь давайте посмотрим на двухядерные системы. В двухядерных системах одновременно могут выполняться две операции. Т.е. теоретически процессор может быть в два раза быстрее. Замечательно. Но есть одна проблема. Эти операции не могут быть из одного потока.
Поток – новое понятие. Давайте еще углубимся в технические детали. Положим, у Вас запущена какая-то программа. Каждая запущенная программа это оказывается не только операции, которые надо выполнить. Это сложный комплекс из операций, которые надо выполнить, данных, которые надо обработать и т.д. Этот комплекс принято называть процессом (не путать с процессором).
Т.е. запущенные СОНО, 1С, Word и т.д. это запущенные процессы, которые выполняются. Положим, что у нас есть запущенный процесс. Этот процесс состоит из большого количества операций, которые надо выполнить. Было бы замечательно, если операции разбивались парами и выполнялись параллельно. Но такое сделать невозможно. Техническая задача, которую надо как-то решить.
Поэтому придумали такую вещь, как потоки. Процессы реализовали так, что один запущенный процесс может состоять из нескольких потоков. Если говорить упрощенно, то один поток это подпроцесс основного процесса. И уже эти потоки могут выполняться одновременно разными ядрами. Так задачи одного процесса разделяют на несколько потоков. Т.е. если у Вас в программе имеются два потока и два ядра в процессоре, то они могут выполняться параллельно. Это если потоки одинаково нагружают ядра.
Теперь посмотрим на двухядерный компьютер, в котором выполняется СОНО: при запуске СОНО в ней запускается не один, не два, не три, а около полусотни разных потоков. Каждый поток выполняет свои задачи. Положим, один поток отвечает за прорисовку графики, второй за отслеживание нажатий на мышь и клавиатуру, третий за синхронизацию с сервером и т.д.
И вот почти все эти потоки почти не нагружают процессор. Каждый из них создает небольшую нагрузку. А в итоге все выполняются довольно быстро. Но есть одна проблема: сама СОНО состоит из одного рабочего потока. Т.е. все основные операции выполняет один единственный поток, который осуществляет основные операции. Самые тяжелые операции, как например, валидация формы выполняются этим рабочим потоком, а остальные играют роль обслуживающих.
Вот и получается: СОНО состоит из примерно 50 потоков, на компьютере два или больше ядер. Но всего один поток нагружает полностью одно ядро.
И имеем, что на компьютере два ядра, но одно из них загружено СОНО, а второе ядро простаивает. В итоге большую часть времени СОНО использует около 50% от возможностей процессора. Лишь иногда использует больше, когда один из вспомогательных потоков требует дополнительных операций.
Т.е. с одной стороны СОНО использует только половину возможностей процессора. А с другой стороны остается одно свободное ядро. А это не так уж плохо.
Почему? Запустите СОНО на одноядерном и двухядерном процессоре. На одноядерном процессоре, если запущена СОНО, то работать в других программах затруднительно, если запустить валидацию (проверку правильности заполнения) большой формы. А вот на двухядерном процессоре можно запустить валидацию и еще что-нибудь делать, если этому чему-то достаточно одного ядра
А вот если у Вас всего два ядра, то если запустить одновременно СОНО и валидацию, плюс упаковку файлов, Word, Excel, браузер и две 1С-ки, то всё начнет тормозить.
Соответственно, если у Вас скажем 4 ядра, то СОНО будет в большинстве случаев использовать лишь чуть больше 25% его возможностей. Зато будет около 75% времени свободно для других программ.
Это конечно очень упрощенно. Многое из этого компьютерщикам известно. Да и периодически вспомогательные потоки требуют некоторого усилия от оставшихся ядер. Но зато дает понимание, как работает СОНО на разных компьютерах. Надеюсь, не очень сложно объяснил.