Здравствуйте, eao197, Вы писали:
E>>>Remark писал не о том, насколько хорошо работает на многоядерных машинах ОС и насколько отшлифован в ней шедулер. А о том, как быть программисту, когда в его распоряжении оказывается несколько процессоров.
iZEN>>Ему надо было точно разграничить области: прикладная область программирования и системная область программирования. Иначе получился абстрактный призыв ко всем слоям населения, охваченным электрическими сетями.
E>Я не помню, чтобы remark говорил что-нибудь о разработке ОС в условиях многоядерности.
E>Чтоже до деления на прикладное и системное программирование... E>Вот, например, сервера БД и встраиваемые БД -- это системное или прикладное программирование?
Это прикладное программирование.
E>А компиляторы?
Прикладное.
E>А Web-сервера?
Прикладное.
Что системное программирование: то, что работает в режиме ядра -- это прежде всего драйверы и шедулер аппаратных потоков исполнения.
iZEN>>Я не знаю, что такое "ACE_Reactor" -- впервые слышу об этой идиоме программирования. И всё, что с ней связано, скорее всего, относится к практическому аспекту конкретной реализации какой-то сущности. Так что индуцировать на её основе принципы ДЛЯ_ВСЕХ не имеет смысла. Она может быть использована лишь как пример, но не эталон (не)применимости.
E>Мне кажется, вам самому нужно определиться с тем, что вы хотели сказать. Судя по всему, многие читатели поняли, о чем говорил remark. Вы же насоветовали ему лучше ознакомиться с Solaris, LWP, TLS и пр. Хотя суть этого совета от меня ускользнула.
Да только что нашёл в Google, что такое ACE. Примочка на C++ для решения вдруг возникших проблем с управлением нагрузкой многоядерных процессоров.
E>ACE_Reactor -- это C++ный фреймворк в составе библиотеки ACE. Он берет на себя задачу контроля за состоянием N дескрипторов каналов ввода/вывода (под Unix-ом это могут быть пайпы, сокеты, файлы, под Windows -- сокеты/пайпы). За каждый канал должен отвечать специальный объект-наследник ACE_Event_Handler. Т.е. ACE_Reactor работает в качестве мультиплексора (или демультиплексора -- путаюсь в этих терминах) событий.
E>В простейшем случае ACE_Reactor является оберткой над while{} c select-ом внутри. Когда канал переходит в состояние готовности к чтению, Reactor вызывает у соответствующего Event_Handler-а метод handle_input. Когда канал переходит в состояние готовности к записи -- вызывается метод handle_output. И т.д.
E>ACE_Reactor используется в качестве базового слоя при реализации различных реактивных (т.е. реагирующих на происходящие события) сетевых служб. А уже что это будут за службы -- служба синхронизации времени, Web-сервер, сервер БД, балансировщих нагрузки или еще что -- зависит от задачи.
На его основе что-либо системное сделали (работающее в ядре ОС) или делают только приложения, так как на основе Pthreads и LWP? (Инетресуюсь, потому что хочу провести/или не провести черту применимости ACE между системным и прикладным использованием)