괴짜 시간 톰캣 && 부두 03

이 방법은 직접 선택기에서 ManageSelector를 조작하지만, ManagedSelector 클래스에 작업을 제출할 필요가없는 경우 있음을,이 클래스는, SelectorUpdate 인터페이스 업데이트 방법을 구현 당신이 업데이트 방법 ManagedSelector에서 수행 할 작업을 정의 할 필요가있다.

예를 들어, 커넥터는 관심의 엔드 포인트 이벤트에 읽기 준비 구성 요소, ManagedSelector에 내부 작업 클래스 ManagedSelector.SelectorUpdate 제출

우리는 방법은 내가이 채널에 관심있는 이벤트를 읽을 준비가 의미, 입력 매개 변수 OP_READ입니다 interestOps의 SelectionKey 클래스를 호출, 업데이트 방법을 참조하십시오. 이러한 업데이트 방법의 구현에 대한 책임을 질 것입니다 누가 대답은 ManagedSelector 자신, 그것은 죽은 SelectorUpdate 작업에 하나씩 실행이 수업을 리라 반복합니다.

ManagedSelector 내가 채널이 선택되어 있는지 수단 준비 / O를 이벤트에 채널을 감지하면, ManagedSelector는 채널의 Runnable을받을 수밖에처럼이 방법은 액세서리를 onSelected 호출 한 다음 가능한 스레드를 던져 실행을 위해 풀.

대상 셀 기술 톰캣과 부두

   자바는 더 큰, 더 복잡한 자바 객체가 자신의 생성, 초기화, 그리고 GC가 소비하는 CPU 및 메모리 리소스는, 이러한 비용을 줄이기 위해, 톰캣과 부두가 사용하는 풀링 객체 기술, 특히, 객체. 소위 객체 풀 기술, 객체 생성, 초기화 및 GC 프로세스에 대한 필요성을 제거하고 재사용 할 수있는 기회를 저장하도록 사용된다 자바 객체입니다. 개체 풀링 기법은 시간이 아이디어를위한 공간의 전형이다.

    오브젝트 풀 자체도 오버 헤드 자원을 유지하기 위해 필요하기 때문에, 모든 장면은 사용 개체 풀링에 적합합니다. 자바의 많은 및 개체의 수는 상대적으로 짧은 시간에 제시하면, 개체 자체가 복잡하고 비교적 큰, 상대적으로 높은 비용 객체 초기화,이 장면은 개체 풀링 기법에 적합합니다. 이러한 톰캣과 부두 HTTP 요청 처리 시나리오는 이러한 특성 (예 : 톰캣 커넥터 SocketWrapper 및 SocketProcessor 등) 복잡한 객체를 많이 생성하는 단일 요청 요구를 처리하기 위해 많은 요청 번호, 그러나 일반적으로 비교를 처리하는 요청의 시간을 충족로 요청이 처리되면 그 장면 객체 풀링되도록 짧고, 이러한 개체는 파괴 될 필요가있다.

Tomcat은 클래스 객체 풀을 사용하여 구현 SynchronizedStack

   주요 내부 SynchronizedStack 인터페이스 스택을 구현하는 오브젝트의 배열, 사용 된 배열을 유지한다 : 빼낼 방법이 두 가지 방법은 객체 및 객체의 반환을 수득 하였다

   우리는 풀 ByteBufferPool 부두에서 개체에, 그것은 본질적으로의 ByteBuffer 오브젝트 풀입니다 찾습니다. 이렇게하면 자주 메모리 할당을 회피 부두가 단지 버퍼의 ByteBuffer 개체를 미리 할당 된 풀을 얻기 위하여 매번 JVM 버퍼 할당 새로운 힙 필요하지 않은 네트워크 중에 기록 데이터 및 사용 가능한 메모리. 또한 고성능 통신이 디자인은 미나로와의 Netty 이러한 미들웨어 볼 수 있습니다

버퍼 할당 및 해제 과정은 해당 버킷을 찾기 위해, 그리고 버킷 양단 큐가 아니라 직접보다 JVM 힙 메모리 응용 프로그램과 버전으로, 팀과 팀의 운영을

   캐싱, 메모리 누수 때문에 개체 캐시 또는 풀의 특성에 직면하게 될 것이다 포함한 풀링 기술의 모든 문제는 목록 및 스택, 캐시 객체 참조뿐만 아니라 컬렉션을 보유하는 컬렉션으로 자바 클래스의 모음입니다 GC는 캐시 객체는 GC되지 않습니다. 객체가 메모리 공간을 점유의 필요한 우리의 필요가 이러한 개체를 정리하기 위해 주도권을 쥐고 그렇다면, 상대적으로 많은 수를 유지한다. 자바 스레드 풀 ThreadPoolExecutor입니다 예, 그것은 allowCoreThreadTimeOut 및 setKeepAliveTime 두 가지 방법이 타임 아웃 후 스레드를 파괴 할 수 제공, 우리는 실제 프로젝트에서이 전략을 참조 할 수 있습니다

++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++

21 | 요약 : 톰캣과 부두 고성능, 동시성 도로

효율적인 동시 프로그래밍을 제로 - 복사, 풀링, 시스템 호출을 줄이고, I / O 및 스레딩 모델 : 톰캣과 부두는 고성능, 동시 설계의 큰 숫자에 사용, 나는 점을 요약. 나는 세부 사항이 디자인은, 당신이 실제 업무에 이러한 기술을 사용할 수 있기를 바랍니다 아래

좁은 잠금있어서 직접 동기화없이 사실상 좁은 범위 잠금하지만 세밀한 오브젝트 잠금 사용

잠금 변수 원자가 치환 CAS

휘발성 키워드를 사용하여

 국가의 생명이 수정 휘발성 키워드를 사용하는 것입니다 내부에 예를 들어 LifecycleBase에하자 사용 톰캣, 그것은이다. 휘발성 목적은 하나 개의 스레드가 수정 변수, 다른 thread가이 변화를 읽을 수 있도록하는 것입니다. 삶의 상태를 들어, 각 스레드에서 필요 휘발성 수정을 사용하여 날짜 값까지 유지합니다.

 

  주석이 공유 사용자 공간 라이브러리이며, 매핑 된 영역을 mmap의 것을, 리눅스는이 문서의 읽기를 가능하게,이 메모리를 읽고 쓸 수 있도록 사용자가 메모리 영역에 파일의 내용을 매핑 할 수 있습니다, 기능은 메모리 매핑 메모리 매핑을 제공하십시오 및 사용자 응용 프로그램이 mmap에 의해 매핑되는 공유 라이브러리 시스템을 사용, 읽기 및 쓰기 파일을 읽고 / 쓰기 시스템 호출을하지 않고, 자바의 MappedByteBuffer 그것을 통해 달성하기 위해 사용자 공간과 커널 공간 사이에 데이터를 복사 할 필요가 없습니다 수정 이 지역에

 

23 | 호스트 컨테이너 : Tomcat이 얼마나 뜨거운 배포 및 핫로드?

   주기적인 작업을 할 수있는 백그라운드 스레드를 열고 말, 경험이 풍부한 학생들은 즉시 그 기능에 추가로 스케줄 스레드 풀, 스레드 풀을 가지고 있다고 생각하지만, 정기적 인 작업을 수행 할 수 있습니다. Tomcat은 백그라운드 스레드를 열어 통해

클래스 파일을 확인하는 WebappLoader로 업데이트에 대한 컨텍스트 컨테이너는 정적 리소스 업데이트입니다 거기에 세션 관리자 세션을 통해 만료 및 자원 관리자에 의해 확인 여부를 확인하고, 마지막으로 backgroundProcess의 부모 클래스 메소드 ContainerBase를 호출

   이 과정에서, 클래스 로더는 중요한 역할을한다. 모든 클래스를로드하는 그것의 파괴 동안 클래스 로더, 클래스 로더에 해당하는 컨테이너 상황도 파괴됩니다. 부팅 과정에서 상황에 맞는 컨테이너, 새 클래스 파일을로드 할 수있는 새로운 클래스 로더를 작성합니다

엔진 호스트 컨텍스트 래퍼

24 | (에) 상황에 맞는 용기 : 톰캣 부모가 어떻게 신뢰 메커니즘을 깰?

    자바 클래스 로더는, 바이트 코드 형식 "을 .class"파일이 JVM 메소드 영역에로드하고, 자바 클래스 데이터 및 방법에 패키지의 JVM 인스턴스의 java.lang.Class의 객체 힙을 구축하는 것입니다 . 이 Class 객체가 무엇입니까? 이 템플릿을 기반으로 특정 Business Object 인스턴스를 생성하는 템플릿 비즈니스 클래스, JVM 클래스로 이해할 수있다.

   모든 다시로드 된 "을 .class"파일 만로드에 가기 전에 실행 중에 클래스에 의해 사용되는 절차를 넣어 시작할 때 JVM은 없습니다. 클래스가 JVM 클래스 로더에 의해로드 완료, JDK는 클래스 로더의 추상화를 제공한다

   톰캣을 통해 자신의 클래스 로딩 로직을 달성하기 위해 사용자 정의 클래스 로더입니다. 당신이 눈치 경우 부모 위탁 메커니즘을 파괴하려는 경우, 몰라, 기본 구현이로 loadClass 부모 위임 메커니즘이기 때문에, loadClass 메소드를 다시 작성하는 것이 필요하다.

   우리는 위의 과정에서 볼 수있는, 톰캣 클래스 로더의 부모는 JRE에 포함 범주에 로컬 디렉토리를 방지하기 위해, 거기에 직접 부모 로더에 위임 아무도 업 없지만, 먼저 로컬 디렉토리에로드, 위임 메커니즘을 파산 핵심 클래스는, 부하에 JVM ExtClassLoader 확장 클래스 로더를 맛보십시오. 왜 첫 번째 클래스 로더 AppClassLoader를로드하기 위해 시스템을 사용하지? 그런 경우 분명히, 그것은 부모가 메커니즘을 신뢰 될 것, 이것은 톰캣 클래스 로더의 트릭이다

25 | 컨텍스트 용기 (의) : 톰캣 방법 분리 웹 응용 프로그램?

CL =는 Thread.currentThread ()을 getContextClassLoader ().;

27 | 새로운 기능 : Tomcat은 어떻게 비동기 서블릿을 지원하기 위해?

     그럼 어떻게이 문제를 해결하기 위해? 해결 방법은 서블릿 3.0 서블릿 비동기 도입된다. 주로에서 웹 응용 프로그램 처리 된 요청을 기다리지 않고이 시간이 많이 걸리는 요청 즉시 톰캣 스레드 수익을 수행하는 별도의 스레드에서 시작하는 웹 응용 프로그램 , 그래서 바로 할 수 있습니다에 대한 응답으로, 스레드 풀에 톰캣의 스레드를 복구 시스템 처리량을 향상시키는 동시에, 시스템의 자원 소비를 줄이는 다른 요청,

비동기 서블릿 예제

우리는 먼저 간단한 예제를 통해 비동기 서블릿이 무엇을 이해하기

++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++

 

 

게시 된 386 개 원래 기사 · 원 찬양 2 · 조회수 9,848

추천

출처blog.csdn.net/kuaipao19950507/article/details/104854774