머리말
최근에 저는 원래 점수 통계의 함수를 수행하고 있습니다. 사용자는 프론트 데스크를 통해 관련 매개 변수를 설정하고 백그라운드에서 실시간으로 계산하고 데이터를 반환합니다. 비교적 말하면 여전히 많은 통계적 기능이 있으므로 여기에 요약하겠습니다.
최상의 사용자 경험은 모든 작업이 실시간으로 데이터를 표시 할 수 있다는 것입니다. 3 초 안에 사용자의 공차 범위 내에 있어야합니다. 따라서 제품을 만드는 것은 사용자 상호 작용 설계를 고려할뿐만 아니라 백엔드 최적화도 필요하지 않습니다.
위의 5 통계를 간단히 볼 수 있습니다. 전반적으로 여전히 많은 통계가 있습니다. 가장 중요한 것은 실시간, 실시간 및 실시간 (중요한 것을 세 번)이라는 것입니다. 분명히 타이밍 작업은 비현실적입니다.
변형 전에
프로그램 논리
작업을 순차적으로 실행합니다 .png
변형 후
프로그램 논리
멀티 태스킹 병렬 처리 .png
멀티 태스킹 병렬 처리는 멀티 코어 CPU에 적합합니다. 단일 코어 CPU에 의해 수행되는 다중 스레드 작업은 비생산적 일 수 있습니다 (컨텍스트 스위칭 및 스레드 생성 및 파괴는 자원을 소비 할 수 있습니다), 특히 CPU 집약적 인 작업.
코드 구현
Statsdemo Pseudo 코드 :
/*** 멀티 태스킹 병렬 통계* Creator Kebang.com* 생성 시간 2018 년 4 월 16 일*/public class statsdemo {Final STATIC SMEPLEDATEFORMAT SDF = NEW SMEPLEDATEFORMAT ( "YYYY-MM-DD HH : MM : SS"); 최종 정적 문자열 startTime = sdf.format (new date ()); public static void main (string [] args)은 중단 된 예시 {countdownlatch latch = new CountdownLatch (5); // 2 개의 러너 통계 1 = 새로운 통계 ( "작업 A", 1000, Latch); STATS Stats2 = 새로운 통계 ( "작업 B", 2000, 래치); STATS STATS3 = 새로운 통계 ( "작업 C", 2000, 래치); 통계 통계 4 = 새로운 통계 ( "작업 D", 2000, 래치); Stats Stats5 = 새로운 통계 ( "작업 E", 2000, Latch); stats1.start (); // 작업 A는 stats2.start (); // task b 실행을 시작합니다. stats3.start (); // task c는 stats4.start (); // task d stats5.start (); // task e를 실행하기 시작합니다. hatch.await (); // 모든 모든 스탯 스케이트장 (All Statics toat.out.println). sdf.format (new date ()); } static class stats는 스레드 {string statsname; int 런타임; CountdownLatch 래치; 공개 통계 (문자열 통계 이름, int 런타임, CountdownLatch Latch) {this.statsname = statsname; this.runtime = 런타임; this.latch = 래치; } public void run () {try {system.out.println (statsname+ "do stats 시작"+ startTime에서 시작); // 작업 실행 시간을 시뮬레이션합니다. System.out.println (statsname + "Do Stats는" + sdf.format (new date ())에서 완료합니다. latch.countdown (); // 단일 작업 종료, 카운터가 One} Catch (InterruptedException e) {e.printstacktrace (); }}}}통계를 동시에 반환하려고하므로 여기에서 CountdownLatch 클래스를 사용합니다. 여기서는 Java 5에 추가 된 새로운 동시 도구 클래스입니다. 사용하기가 매우 간단합니다. 상세한 사용 단계는 위의 의사 코드를 참조하여 제공됩니다.
CountdownLatch는 하나 이상의 작업을 동기화하는 데 사용되어 다른 작업에서 수행하는 작업 세트가 완료 될 때까지 기다릴 수 있습니다. CountdownLatch의 일반적인 사용법은 프로그램을 N 독립 솔버 작업으로 나누고 N의 값을 가진 CountdownLatch를 만드는 것입니다. 각 작업이 완료되면이 래치에서 카운트 다운이 호출되며 문제가 해결되기를 기다리는 작업은이 래치를 기다리고 래치 카운트가 끝날 때까지 스스로 차단합니다.
특정 소스 코드 해석은 다음을 참조 할 수 있습니다 : 소스 코드 분석 CountdownLatch
프로젝트 소스 코드 : https://gitee.com/52itstyle/spring-data-jpa
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.