클라이언트/서버 구현

문제 신고 <ph type="x-smartling-placeholder"></ph> 소스 보기 1박 · 7.2 · 7.1 · 7.0 · 6.5 · 6.4

Bazel 시스템은 수명이 긴 서버 프로세스로 구현됩니다. 이렇게 하면 일괄 지향 구현으로는 불가능한 많은 최적화를 수행하는데, BUILD 파일의 캐싱, 종속 항목 그래프, 도움이 될 것입니다 이를 통해 증분 빌드의 속도를 높이고 buildquery 같은 다른 명령어가 쿼리 속도가 매우 빠릅니다. 각 서버는 호출할 수 있습니다. 추가적인 동시 호출은 fail-fast (--block_for_lock 참고)

bazel를 실행하면 클라이언트가 실행됩니다. 클라이언트가 서버를 찾음 출력 베이스에 따라 달라집니다. 기본 작업공간 디렉터리의 경로와 사용자 ID에 따라 결정되므로 여러 작업공간에서 빌드하면 여러 출력 베이스가 있으므로 여러 Bazel 서버 프로세스를 포함합니다 동일한 워크스테이션의 여러 사용자가 동일한 작업공간에서 동시에 빌드할 수 있어야 합니다. 출력 베이스가 다르기 때문입니다. (서로 다른 사용자 ID)

클라이언트가 실행 중인 서버 인스턴스를 찾을 수 없는 경우 새 인스턴스를 시작합니다. 그것은 출력 베이스가 이미 있는지 확인하여 이를 수행합니다. 즉, 블레이즈가 보관 파일이 이미 압축해제되어 있습니다. 그렇지 않은 경우 출력 베이스가 존재하지 않는 경우 클라이언트가 보관 파일의 압축을 풀고 mtime를 9년 날짜로 설정합니다. 있습니다. 설치되면 클라이언트는 mtime 설치 파일의 조작이 일어나지 않도록 압축 해제된 파일의 경우 최신 시점과 같아야 합니다. 있습니다.

일정 시간 (기본값: 3시간, 시작 옵션 --max_idle_secs를 사용하여 수정할 수 있음). 최대 서버가 실행 중이라는 사실이 사용자에게는 보이지 않지만 이 점을 염두에 두는 것이 도움이 되기도 합니다 예를 들어, kubectl 명령어 여러 가지 자동화된 빌드를 실행하는 데 많은 유휴 서버가 축적되지 않도록 하기 위해 이렇게 하려면 작업을 완료했을 때 명시적으로 종료하거나 짧아야 합니다.

Bazel 서버 프로세스의 이름이 ps x 또는 ps -e f의 출력에 표시됩니다. as bazel(dirname), 여기서 dirname은 작업공간 디렉터리의 루트가 포함된 디렉터리로 이동합니다. 예를 들면 다음과 같습니다.

ps -e f
16143 ?        Sl     3:00 bazel(src-johndoe2) -server -Djava.library.path=...

이렇게 하면 주어진 서버에 속한 서버 프로세스를 살펴보겠습니다 (Bazel 서버의 ps에 대한 다른 옵션을 사용하면 주의하세요. 프로세스의 이름은 java로만 지정할 수 있습니다.) Bazel 서버는 셧다운 명령어.

bazel를 실행할 때 클라이언트는 먼저 서버가 적절한지 확인합니다. version; 없으면 서버가 중지되고 새 서버가 시작됩니다. 이렇게 하면 장기 실행 서버 프로세스의 사용이 관리할 수 있습니다