고주파 거래에 가장 적합한 솔루션은 무엇입니까? 이 문제에 대해 줄곧 서로 모순되는 관점이 있다. 한편으로는 사람들이 고주파 거래가 무엇인지 모르기 때문에, 항상 사람들의 상상력과 차이가 있고, 그 다음은 속도 문제이며, 어떤 언어가 더 빨리 개발될 수 있기 때문이다. 이 글의 저자는 C++ 와 Java 라는 두 가지 매우 유행하는 언어를 비교했다. 만약 당신이 전형적인 Java 와 C++ 프로그래머이고, 이미 이 두 가지 언어로 전형적인 객체 지향 프로그램을 작성했다면. 고주파 솔루션을 동시에 작성하면 Java 프로그래머가 프로그램을 미리 완료하고 응용 프로그램을 조정할 시간이 있을 수 있습니다. 이 경우, 외람되지만, Java 어플리케이션은 더 빠를 것이다. 제 경험으로 볼 때, Java 는 C++ 보다 더 잘 할 수 있습니다. Java 는 마이크로벤치마킹을 했지만 아무것도 하지 않았기 때문입니다. 그러나 시간 제한이 없고 Java 와 C++ 프로그램을 조정하면 C++ 프로그램이 Java 보다 빠릅니다. 그러나 제한된 자원과 변화하는 환경을 감안할 때 동적 언어는 실제 응용 프로그램에서 특별한 역할을 할 수 있습니다. 주식거래의 고주파 시장에서는 10 마이크로초의 지연도 진지하게 받아들여야 한다. Java, 심지어 표준 OOP C++ 도 상용 하드웨어에 적합하지 않습니다. C 또는 단순화된 C++ 와 FPGAs 및 GPU 와 같은 전문 하드웨어 도구를 사용해야 합니다. 그러나 FX: 외환 (FX) 시장에서 고주파수는 지연 시간이 100 마이크로초보다 작지 않다는 것을 의미합니다. 이런 환경에서는 C++ 또는 Java (낮은 GC) 가 모두 좋은 선택이다. 개인적으로 Java 는 변화무쌍한 거래 장소에서 더 많은 유연성을 가지고 있다고 생각한다. 사람들이 고주파, 특히 은행 시스템에 대해 이야기할 때 시간을 1 밀리초 또는 몇 밀리초만 줄이길 원합니다. 이 경우 Java, Scala 또는 C# 과 같은 유연성/다태형 언어는 C/C++ 또는 FPGA 를 능가하는 서비스 또는 안정성 이점을 가진 프로그래밍 시간이 더 늘어날 것입니다. Java 가 직면한 문제는 언어가 아니라 캐시 제어 및 컨텍스트 상호 작용이 부족합니다. 이미 로컬에서 작동 중인 메모리를 복사하지만 실행 사이에 다른 지연 시간을 사용하면 복제 속도가 느려집니다. 그 이유는 부분 캐시가 교체되어 복제 자체에 시간이 걸리기 때문입니다. 이는 메모리에 액세스하는 모든 작업과 동일합니다. 예를 들어, 계획 객체에 액세스하면 속도가 느려집니다. Private void doTest(Pauser delay) 가 interrupted exception {int [] times = new int [1000 */kk 를 던졌습니다 Byte[] bytes = 새 바이트 [32 *1024]; Byte[] bytes2 = 새 바이트 [32 *1024]; Longend = system.nanotime ()+(long) 5e9; Int I;; For(I = 0;; 나< 곱하기 길이; I++) {longstart = system.nanotime (); System.arraycopy(bytes, 0, bytes2, 0, bytes.length); Long time = system.nanotime ()-start; 시간 [I] = (int) 시간; Delay.pause (); If (시작 및 gt; End) 휴식; } arrays.sort (시간, 0, I); System.out.printf(delay+":복제 메모리 지연1/50/99%% tile%.1f/% Times[i/2]/1e3, times [I-I/100-1]/654433 대부분의 시간은 로컬 방법에 소요되며 테스트 중에 오브젝트를 만들거나 버리지 않습니다. YIELD: 복제 메모리 지연1/50/99% tile1.6/1.6/2.3 us no _ waild 0: 복제 메모리 지연 1/50/99% 2.7 us NO_WAIT: 복제 메모리 지연 1/50/ 99% tile/kloc-; 99% tile 2.7/3.6/6.6 usbusy _ wait _ 3: 복제 메모리 지연 1/50/99% tile 2.7 메모리 복제의 일반적인 시간 (중앙값) 은/입니다 이것은 실제 통제권이 없기 때문에 자바 (Java) 와는 아무런 관련이 없는 약 3 배의 비율이다. 가장 좋은 상황에서도 시차는 두 배 정도 된다. 코드 ThreadlatencyTest.java 요약 매우 높은 주파수의 경우 핵심 엔진은 일반적으로 C++ 또는 JAVA 객체 지향 구현보다 C, 어셈블리 및 사용자 정의 하드웨어로 구현됩니다. 지연 수요는 더 이상 긴장하지 않기 때문입니다 (기본 플랫폼이 C/C++ 로 아키텍처를 구축할 때 시간 응답은 애플리케이션 플랫폼 수준에서 중요하지 않으며 개발 응답이 더 중요하다는 의미). 따라서 Java 및 기타 동적 언어가 더 효율적일 수 있습니다. 이 경우 Java 를 선택하면 급변하는 시장/수요에 쉽게 대처할 수 있습니다.