Кажется, что все крупные инвестиционные банки используют С++ в Unix (Linux, Solaris) для своих приложений с малой задержкой/высокочастотным сервером. Почему Windows обычно не используется в качестве платформы для этого? Существуют ли технические причины, по которым Windows не может конкурировать?
Торговые системы с низкой задержкой, использующие С++ в Windows?
Ответ 1
Требования к производительности в системах с крайне низкой задержкой, используемые для алгоритмической торговли, являются экстремальными. В этой среде подсчитываются микросекунды.
Я не уверен в том, что Solaris, но в случае с Linux, эти ребята пишут и используют латентные исправления и настройки для всего ядра, начиная с драйверов сетевых карт. Это не значит, что существует техническая причина, почему это невозможно сделать в Windows, но есть практический/юридический - доступ к исходному коду и возможность перекомпилировать его с изменениями.
Ответ 2
Технически, нет. Однако есть очень простая деловая причина: остальная часть финансового мира работает на Unix. Банки работают на AIX, сам фондовый рынок работает на Unix, и поэтому проще всего найти программистов в финансовом мире, которые используются в среде Unix, а не в Windows.
Ответ 3
(Я работал в инвестиционно-банковском секторе уже 8 лет) Фактически, довольно много того, что банки называют низкой задержкой, выполняется на Java. И даже не в реальном времени Java - просто нормальная Java с выключенным GC. Основной трюк здесь заключается в том, чтобы убедиться, что вы полностью использовали весь свой код для запуска jit до того, как вы переключите конкретную виртуальную машину на prod (так что у вас есть цикл запуска, который выполняется в течение нескольких минут - и горячий переход на другой ресурс).
Причины использования Linux:
Дружественные
Удаленное администрирование все же лучше, а также низкое воздействие - оно будет иметь минимальное влияние на другие процессы на машине. Помните, что эти системы часто размещаются на бирже, поэтому ссылки на машины (от вас/вашей группы поддержки), вероятно, будут хуже, чем у ваших обычных центров обработки данных.
Tunability - возможность установить swappiness на 0, заставить JVM предварительно распределить большие страницы, а другие трюки низкого уровня весьма полезны.
Я уверен, что вы можете заставить Windows работать приемлемо, но для этого нет огромного преимущества - как говорили другие, любые работники, которых вы браковали, должны были заново открыть все свои трюки с задержкой, а не просто запустить контрольный список.
Ответ 4
Linux/UNIX гораздо более удобны для одновременных удаленных пользователей, что упрощает работу с script вокруг систем, использует стандартные инструменты, такие как grep/sed/awk/perl/ruby /less в журналах... ssh/scp... все это там.
Существуют также технические проблемы, например: для измерения прошедшего времени в Windows вы можете выбирать между набором функций на основе тактового сигнала Windows и аппаратным QueryPerformanceCounter(). Первый шаг - от 10 до 16 миллисекунд (обратите внимание: какая-то документация подразумевает более высокую точность - например, значения из метода GetSystemTimeAsFileTime() равны 100 нс, но они сообщают о том же 100ns краю тактового сигнала, пока он не гаснет снова). Последний - QueryPerformanceCounter() - имеет проблемы остановки при остановке, когда разные ядра/процессор могут сообщать о часах с момента запуска, которые отличаются на несколько секунд из-за прогрева в разное время во время загрузки системы. MSDN документирует это как возможную ошибку BIOS, но она распространена. Итак, кто хочет разрабатывать системы с низкой задержкой на платформе, которые невозможно правильно измерить? (Есть решения, но вы не найдете ни одного программного обеспечения, сидящего удобно в режиме boost или ACE).
Многие варианты Linux/UNIX имеют множество легко настраиваемых параметров для компенсации задержки для одного события против средней задержки при загрузке, размерах временных интервалов, политиках планирования и т.д. В операционных системах с открытым исходным кодом также есть уверенность, которая приходит с имея возможность ссылаться на код, когда вы думаете, что что-то должно быть быстрее, чем оно есть, и знание о том, что (потенциально огромное) сообщество людей было и делает это критически - с Windows это, очевидно, будет главным образом тем, re, чтобы посмотреть на него.
На стороне FUD/репутации - несколько неосязаемой, но важной части причин выбора ОС - я думаю, что большинство программистов в отрасли просто доверяют Linux/UNIX больше, чтобы обеспечить надежное планирование и поведение. Кроме того, Linux/UNIX имеет репутацию потерпеть крах меньше, хотя в наши дни Windows довольно надежна, а Linux имеет гораздо более изменчивую базу кода, чем Solaris или FreeBSD.
Ответ 5
Причина проста, 10-20 лет назад, когда появились такие системы, "хардкорные" многопроцессорные серверы были ТОЛЬКО на какой-то UNIX. В наши дни Windows NT в детском саду. Поэтому причина - "историческая".
Современные системы могут быть разработаны на Windows, это просто вопрос вкуса в наши дни.
PS: Я работаю над одной из таких систем:-)
Ответ 6
Существует множество причин, но причина не только историческая. На самом деле кажется, что все больше и больше финансовых приложений на стороне сервера работают на днях, чем когда-либо ранее (включая такие крупные имена, как Лондонская фондовая биржа, которые перешли с платформы .NET). Для клиентских или настольных приложений было бы глупо ориентировать на что угодно, кроме Windows, поскольку это установленная платформа. Тем не менее, для серверных приложений большинство мест, которые я работал при развертывании, в * nix.
Ответ 7
Я частично согласен с большинством ответов выше. Хотя то, что я понял, является самой большой причиной использования С++, потому что он относительно быстрее с очень обширной библиотекой STL.
Помимо этого, система linux/unix также используется для повышения производительности. Я знаю много команд с низкой задержкой, которые в значительной степени настраивают ядро Linux. Очевидно, что этот уровень свободы не предоставляется окнами.
Другие причины, такие как устаревшие системы, стоимость лицензии, количество ресурсов, а также меньшие факторы вождения. Как упоминалось "rjw", я видел, что команды используют Java также с модифицированной JVM.
Ответ 8
Второе мнение о историческом и доступ к манипуляции с ядром.
Кроме этих причин, я также считаю, что так же, как они отключают сборку мусора .NET и аналогичный механизм в Java при использовании этих технологий в некоторой низкой задержке. Они могут избежать Windows из-за API на высоком уровне, которые взаимодействуют с низкими уровнями os, а затем с ядром.
Итак, ядро - это, конечно, ядро, с которым можно взаимодействовать с использованием низкого уровня os. API-интерфейсы высокого уровня предоставляются только для облегчения жизни обычных пользователей. Но в случае низкой латентности это оказывается жирным слоем и потерями секунд в каждой операции. Таким образом, выгодный вариант для получения нескольких долей секунды за звонок.
Кроме того, нужно учитывать интеграцию. Большинство серверов, центров обработки данных, обмены используют UNIX, а не окна, поэтому использование клиентов того же семейства упрощает интеграцию и общение.
Тогда у вас есть проблемы с безопасностью (многие люди могут не согласиться с этим моментом) взлома UNIX не так просто по сравнению с взломом WINDOWS. Я не согласен, что лицензирование должно быть проблемой для банков, потому что они лишают деньги на каждом отдельном аппаратном и программном обеспечении и людей, которые их настраивают, поэтому покупка лицензий не будет такой же большой проблемой, если учитывать то, что они получают при покупке.