다중 스레딩 프로그래머는 종종 인터뷰, 숙달 수준에에서 직면 하 고 다중 스레딩 개념의 이해는 종종 사람의 프로그래밍 강도 측정 하는 데 사용 됩니다 문제입니다. 네, 일반 다중 스레딩 쉽지 않다, 다음 때 다중 스레딩 만남 "코끼리" 불꽃의 어떤 종류를 생산할 예정 이다? 여기에 우리가 공유--자바 스레드 풀 관리 및 분산된 Hadoop 프레임 워크 일정 严澜, 상하이 크리에이 티브 기술 감독.
일반적으로 스레드 개발 것은와 같은 톰캣에서 서블릿은 스레드, 다중 사용자 액세스를 어떻게 제공 우리 아무 스레드? 하지만 그냥 터치 스레드를 시작 하는 많은 개발자는 많은 고통을. 다중 스레드 개발으로 단일 스레드 개발에서 모든 사람을 위한 간단한 스레딩 모드 개발 프레임 워크의 집합을 수행 하는 방법 이것은 정말 상대적으로 어려운 프로젝트 이다.
특정 스레드 무엇입니까? 먼저 어떤 과정은 봐, 프로세스는 시스템에서 실행 하는 프로그램,이 프로그램은 메모리, 프로세서, 파일 시스템 및 기타 관련된 리소스 사용할 수 있습니다. 예를 들어, QQ 소프트웨어, 이클립스, 톰캣 등은 EXE 프로그램, 실행 시작 프로세스. 다중 스레드는 왜 필요 합니까? 각 프로세스는 혼자 한 처리 되는 경우 일 하지 처리할 수 여러 작업 동시에, 우리가 열고 같이 QQ는 사람과 채팅할 수 있습니다, 우리가 사용 하는 이클립스 개발 코드 코드를 컴파일하지 않을 수 있습니다, 우리는 톰캣 서비스만 사용자 요청을 사용할 수 있습니다 그럼 내가 생각 하는 우리는 여전히 원시 사회에에서 요청. 목적은 다중 스레딩 동시에 여러 일 또는 요청을 처리 하는 프로세스를 허용 하는 것입니다. 예를 들어 지금 우리가 QQ 사용 소프트웨어 많은 사람들이 동시에 채팅할 수 있는, 우리가 컴파일 코드 또한 코드 수를 개발 하기 위해 이클립스를 사용, tomcat 여러 사용자 요청을 처리할 수 있습니다.
너무 많은 스레드 혜택, 다중 스레드 프로그램에는 단일 프로세스 프로그램을 설정 하는 방법? 다른 언어는 서로 다른 구현, 여기에 Java 언어 구현 두 가지 방법으로 다중 스레딩: Java.lang.Thread 클래스를 확장, Java.lang.Runnable 인터페이스 구현.
예를 들어 보자, 분산을 계산 해야 100 데이터를 가정. 단일 스레드 처리 속도 좀 봐:
처리 속도 보세요 다중 스레딩, 별도로 처리 10 스레드:
당신은 볼의 혜택! 단일 스레드 필요만 1 초의 10 스레드. 시스템 리소스는 병렬 컴퓨팅을 실현 하기 위해 활용 됩니다. 아마도 더 효율적입니다 스레드 수를 증가 하는 오해가 이다. 더 많은 스레드 높은 처리 성능을 잘못 이다, 패러다임 나쁜 후 적절 한, 이어야 한다. 컴퓨터 하드웨어의 몇 가지 지식을 대중화를 해야 합니다. 우리의 CPU는 연산자 이며 스레드 실행 해야 실행이 연산자. 하지만 하나의 리소스, 그리고 모두가 그것을 위해 출 격 합니다. 다음 알고리즘은 일반적으로 사용 하는 CPU 스케줄링에 대 한 출 격을:
큐 방법, 처음와 서 첫 번째 서비스입니다. 작업은, 아무리 우리가 도착 큐에 따르면 큐 해야 합니다.
시간 조각 회전, 이것은 또한 오래 된 CPU 스케줄링 알고리즘입니다. 이 시간을 초과할 수 없습니다 각 작업에 대 한 CPU 시간 시간 슬라이스를 설정 합니다. 이 시간을 초과 하는 경우 작업은 일시 중지 하 고 계속 실행에 대 한 대기 큐의 끝에 배치.
우선 모드: 작업 우선 순위, 우선 순위 및 우선 순위 없이 실행에 대 한 대기.
이러한 세 가지 알고리즘 장점과 단점, 실제 운영 체제 우선 먼저 처리 될 수 있습니다 하지만 또한 수 없습니다 항상 처리 우선 순위 작업을 보장 하기 위해 알고리즘의 다양 한 결합. 하드웨어 효율성을 개선 하기 위해 멀티 코어 CPU, 다중 스레드 CPU 및 기타 솔루션에 또한 있다. 현재, 스레드 수의 증가 CPU 스케줄링의 부하가 증가 귀 착될 것 이다, CPU 스레드, 스레드, 스레드, 스레드 요구를 밖으로 CPU, 여부를 파괴를 만드는 등의 많은 여부 발송 하는 데 필요한 CPU에 할당할 필요가. 이들은 시스템을 사용 하는 데 필요한 리소스 그리고 그러므로, 우리이 힙 스레드 리소스의 관리를 통합 하는 메커니즘. 스레드 풀링의 아이디어를 자주 만들기 및 스레드 파괴의 비용을 해결 합니다. 스레드 풀을 만드는 사용자를 기다리지 않고 언제 든 지 사용자가 처리 대기 미리 결정 된 크기 스레드를 나타냅니다. 자바 개발에 특히 자주 생성 및 개체의 소멸 감소 가비지 수집 메커니즘의 소비를 최소화.
전에 우리가 우리 자신의 모든 스레드 풀 하지만 jdk1.5의 소개와 함께, JDK는 java.util.concurrent 동시 개발 프레임 워크, 우리 스레드 풀 프레임 워크 중복 작업의 대부분을 해결 하기 위해 가져. 실행자 사용 하는 다음 나열 하 고 나중에 그것을 설명 하는 스레드 풀을 만들 수 있습니다.
캐싱 기능을 가진 스레드 풀을 설정 하는 Newcachedthreadpool
Newfixedthreadpool 고정된 스레드 수 설정
Newscheduledthreadpool 스레드 시간 일정 설정
당신은 스레드 풀 때 고려해 야 할 몇 가지 문제가 있다:
어떻게 스레드 관리, 새로운 작업 스레드를 만드는 등.
스레드가 중지, 어떻게 시작 합니다.
스레드 예약된 모드의 간격 타이밍 뿐만 아니라 정확한 시간 시작을 얻을 수 있습니다. 예를 들면 1 시에 시작합니다.
어떻게 스레드 모니터링, 스레드는 실행 하는 동안 죽으면, 어떻게 우리가 알고 예외 종료 합니다.
이러한 점을 고려 하면 우리 중앙, 스레드를 관리 하 고 우리 Java.util.concurrent와 그것을 할 수 없습니다. 다음 사항을 할 필요가:
단일 테이블에 비즈니스의 구성과 사업에서 스레드를 구분 합니다.
동시 기반 스레드 컨트롤 스레드, 스레드, 스레드 살아남은 하트 비트 메커니즘 및 스레드 예외 로깅 모듈을 막으려고 인터페이스의 상태를 포함 하는 프레임 워크를 예약을 생성 합니다.
유연한 타이머 구성 요소를 정확한 타이밍 시스템을 달성 하기 위해 석 영 타이머 구성 요소를 추가 합니다.
결합 스레드 풀 작업 스케줄링 시스템 구축 사업 구성 정보. 이것은 구성 관리, 추가 스레드 작업, 모니터링, 타이밍, 관리, 그리고 등을 통해 행 해질 수 있다.
구성 요소 다이어그램이입니다.
그것은 좋은 스레드 스케줄링 컴퓨팅의 많은 대 한 필요에 대처 하는 프레임 워크를 구축할 수? 대답은 아니요 컴퓨터의 리소스 제한 때문에, 그것 또한 언급 그 CPU 시간 주기, 큐, 많은 작업 증가 CPU, 컴퓨터에에서 CPU를 호스팅할 수 있습니다 경우에 제한 됩니다. 따라서, 전체 스레드 풀 프레임 워크 컴퓨터에 리소스 병목 현상, 도달과 같은 수평 스케일링, 대처 하는 분산된 작업 프레임 워크를 일정으로 만들어질 필요가 즉시 컴퓨터 배포 일정 프레임 워크를 추가 하 고 비즈니스 컴퓨팅 파워를 높일 수 있습니다. 좋아, 그것을 구축 하는 방법? 다음 그림:
우리 봄을 캡슐화 하는 jeeframework을 바탕으로, 데이터베이스, 데이터베이스 작업, 그리고 비즈니스를 끝내 사업 방법 호출할 수 있습니다. 주요 구성 요소입니다.
작업 집합은 데이터베이스 서버에 저장
컨트롤 센터는 클러스터에서 노드 상태를 관리 하 고 배포 하는 작업에 대 한 책임
스레드 풀을 클러스터 예약 제어 센터에 의해 배포 하는 작업의 실행에 대 한 책임은
웹 서버 할당, 관리, 이며 시각적 작업 작업에 의해 모니터링.
일반적으로이 아키텍처는 일반적인 분산된 처리 요구 사항을 처리할 수 있습니다 하지만 하나의 단점은 단일 스레드 프로그래밍 모델 개발자 성장과 비즈니스 모델 성장으로 복잡 한 된다. 예를 들어 1000w 데이터 세분화,이 경우 실행, 시간 소비는 데이터베이스를 쿼리 하는 시간을 많이 소요 됩니다 계산 하지 스레드에 대 한 필요 합니다. 어떤 사람들은, 그럼 내가 계산, 다른 기계로 1000w 데이터를 분할 하 고 확인 뿐 아니라 병합? 이 모델의 특수 한 경우 이므로, 특히 개발이 필요 해당 프로그램에 문제가 되지 않습니다 하지만 수행 하는 방법에 대 한 다른 거 대 한 수요가 있다? 예를 들어 게시물에서 모든 사용자가 게시 된 게시물의 3 년에는 팬 들의 대부분 밖으로 데리고 높은 사용자 시간 전달 합니다. 일련의 절차를 달성 하기 위해 너무 번잡 할 필요가! 분산 클라우드 컴퓨팅 아키텍처 이러한 문제를 해결, 개발 복잡성 감소와 높은 성능, 그리고 사람들 일 최근 뜨거운 프레임, 하 둡, 예의 생각 하지. Hadoop이이 문제를 해결, 분해에 의해 계산, 그리고 대형 전산 작업을 병합 하는 우리가 원하는? 하지만이 연주는 사람 그는 별도 프로세스를 알고. 아니요! 그 프로세스의 무리는 우리의 스케줄링 프레임 워크와 결합 하는 방법? 그림된 단어를 보면:
기본 이전 분산된 일정 프레임 워크 구성 변경, 다음 구성 요소 및 기능을 추가 하지 않습니다.
분산된 스케줄링 프레임 워크를 변형 하 여 MapReduce 작업으로 스레드 작업을 끌 수 있으며 Hadoop 클러스터에 제출.
Hadoop 클러스터는 비즈니스 인터페이스의 봄, 데이터베이스 액세스 비즈니스 논리를 처리 하는 때 호출할 수 있습니다.
하이브에 의해 Hadoop 필요로 하는 데이터를 쿼리할 수 있습니다.
Hadoop은 hdfs/hbase 읽기 / 쓰기 작업에 액세스할 수 있습니다.
비즈니스 데이터는 시간에 창 고를 하이브에 추가 되어야 합니다.
Hbase 데이터를 자주 업데이트 데이터, 하이브를 hbase의 기본 구조는 일반 파일에 또한 저장 될 수 hdfs의 처리의 처리를 하이브.
이 방법에서는, 전체 변환은 기본적으로 완료 됩니다. 그러나, 그것은 중요 한 건축 설계 개발 프로세스의 복잡성을 줄여야 합니다. 비록 Hadoop 모델 여기 도입 하 고, 프레임 워크에서 개발자 여전히 숨겨져 있습니다. 비즈니스 프로세스 클래스 Hadoop, 또는 독립 실행형 모드에서 실행할 수 있으며 봄 때 호출할 수 있습니다. 학습 비용, 천천히 배운 새로운 기술을 배우고 실제 전투에서의 개발을 줄일 수 있습니다.
화면 화면 캡처: