문제

최적화 된 코드, 구현의 선명도, 효율성 및 휴대 성 측면에서 누군가가 자신의 설계 트레이드 오프를 정당화하는 경우 어떻게 선택합니까?

이 질문의 목적을위한 관련 예는 큰 파일 처리 일 수 있으며, "큰 파일"은 무작위 액세스 방법을 사용하여 단순화 될 문제에 대한 "상당히 많은 GB"입니다.

이 파일을 읽고 수정하기위한 접근 방식은 다음과 같습니다.

  1. 어쨌든 스트림을 사용하고 원하는 장소를 찾으십시오. 휴대용이지만 잠재적으로 느리고 명확하지 않습니다. 이것은 실질적으로 모든 OS에 효과적입니다.
  2. 파일의 관련 부분을 큰 블록으로 매핑하십시오. 예를 들어, MMAP 각 청크에 대해 처리를 위해 파일의 50MB 덩어리를 제공합니다. 해당 시스템에 대한 MMAP를 구현하는 미묘함에 따라 많은 OS에서 작동합니다.
  3. 전체 파일을 MMAP로 만-64 비트 OS가 필요하며이를 구현하는 가장 효율적이고 명확한 방법이지만 32 비트 OS에서는 작동하지 않습니다.
도움이 되었습니까?

해결책

무엇을 요구하는지 확실하지 않지만 설계 프로세스의 일부는 휴대 성 및 성능에 대한 요구 사항을 분석하는 것입니다 (다른 요소 중).

코드를 포트 할 필요가없고 절대적으로 최고의 성능이 필요하다는 것을 알고 있다면 구현을 그에 따라 조정합니다. 자체적으로 휴대 할 수있는 점은 없습니다.

또한 성능과 휴대 성을 원한다면 각 플랫폼에 구현을 제공하는 것을 막을 수있는 것은 없습니다. 물론 이것은 비용을 증가시킬 것이므로 실제로 귀하의 요구를 우선시하는 데 도움이됩니다.

다른 팁

제약이 없으면이 질문은 합리적으로 합리적으로 대답 할 수 없습니다.

당신은 집이나 자동차 또는 사진을 그리는지 알려주지 않고 "최고의 색상이 무엇입니까"라고 묻습니다.

제약에는 적어도 포함됩니다

  • 선택 언어
  • 대상 플랫폼 (멀티 CPU 산업 급 서버 또는 iPhone?)
  • 최적화 속도 vs. 메모리
  • 비용 (누가 자금을 지원하고 전달 제약이 있습니까?)

소프트웨어는 "궁극적 인"이식성을 가질 수 없습니다.

이러한 종류의 문제의 예는 다양한 방법을 사용하여 처리되지만 필요한 특정 입력/출력과 "최고"측정에 대한 제약 조건이 엄격합니다. 와이드 파인더 프로젝트.

기본적으로 코딩하기 전에 먼저 생각해야합니다. 모든 프로젝트는 독특하며 요구에 대한 분석은 그 요구를 결정하는 데 도움이 될 수 있습니다. 모든 프로젝트에 가장 적합한 솔루션을 만드는 것은 몇 가지에 달려 있습니다 ...

우선,이 프로젝트는 Multiplatform이어야합니까? 선택에 따라 올바른 프로그래밍 언어를 선택하는 것이 더 쉬워야합니다. 그런 다음 다시 프로젝트에서 하나 이상의 언어를 사용할 수 있으며 이는 완전히 정상입니다. 휴대 성이 반드시 성능이 줄어드는 것은 아닙니다. 품질 코드가 필요하기 때문에 목표를 달성하기 위해 더 어려운 작업이 포함된다는 것입니다. 또한 모든 프로그래밍 언어에는 고유 한 철학이 있습니다. 그들이 무엇인지 배우십시오. 한 가지 확실한 점은 특정 문제가 자주 반복해서 돌아 오는 것입니다. 그렇기 때문에 다른 디자인 패턴이 때때로 변화를 만들 수 있지만 일부 언어에는 고유 한 관용구가 있으며 언어를 선택할 때 매우 관련성이 높습니다. 생각이 필요한 또 다른 것은 프로젝트에 대해 가질 수있는 다른 접근법입니다. 멀티 스레딩, 소켓, 클라이언트/서버 시스템 및 기타 여러 기술이 모두 사용할 수 있습니다. 올바른 기술을 선택하면 프로젝트를 개선하는 데 도움이 될 수 있습니다.

오늘날 사용 가능한 다양한 솔루션을 아는 것은 다른 트레이드 오프를 위해 선택할 시간을 결정하는 데 도움이 될 것입니다.

실제로 프로젝트 드라이버에 달려 있습니다. 사내 엔터프라이즈 데브를 수행하는 경우 Target Hardare에서 작동 할 수있는 가장 간단한 작업을 수행하십시오. 필요에 따라 성능을위한 모드.

1 일째에 다른 하드웨어 플랫폼을 지원해야한다는 것을 알고 있다면 휴대용 구현을 선택하거나 여러 접근 방식을 사용해야합니다.

휴대 성을위한 휴대 성을위한 마케팅 성을위한 마케팅은 시작된 이래로 Java의 마케팅 Spiel이었으며 컨벤션에 의해 C의 삶의 사실이며, 나는 그것을 준수하는 대부분의 사람들이 Java 또는 C와 함께 "자랐다"고 믿는다.

그러나 사실, 절대적인 이식성은 중간 복잡성을 가진 대부분의 응용 분야에서 가장 사소한 것에 대해서만 사실입니다. 복잡성이 높은 것은 전문화 된 조정이 필요합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top