PHP 인터뷰에서 접할 수 있는 스레드 풀에 대한 질문
이 기사는 인터뷰 중에 발생할 수 있는 스레드 풀 문제를 소개합니다. 도움이 필요한 친구들이 참고할 수 있는 내용입니다.
머리말
우리는 인터뷰 중에 멀티스레딩과 스레드 풀에 대한 질문을 자주 접하게 됩니다. 어떻게 대답해야 할까요? 오늘은 Java의 Thread Pool에 대해 알아 보겠습니다.
스레드 풀이란 무엇입니까
스레드 풀은 멀티 스레드 애플리케이션을 초기화하는 동안 스레드 모음을 만든 다음 새 스레드를 만드는 대신 새 작업을 수행해야 할 때 이러한 스레드를 재사용하는 것을 말합니다. 스레드 풀의 스레드 수는 일반적으로 사용 가능한 메모리 양과 애플리케이션 요구 사항에 따라 전적으로 달라집니다. 그러나 사용 가능한 스레드 수를 늘릴 수 있습니다. 스레드 풀의 각 스레드에는 작업이 할당되고 작업이 완료되면 스레드는 풀로 돌아가 다음 할당된 작업을 기다립니다.
직접 말하면 애플리케이션에 대해 여러 스레드를 실행하는 스레드 모음입니다.
스레드 풀이 왜 필요한가요?
스레드 풀을 사용하여 현재 문제를 해결했습니다.
스레드 풀을 사용하여 비디오에 여러 표지를 추가하여 시간과 리소스를 절약할 수 있습니다.
백그라운드 서버는 여러 사진을 지원하지 않습니다. 업로드, 스레드 풀을 사용하여 여러 장의 사진을 업로드하면 업로드 시간이 단축됩니다
효과 사진은 다음과 같습니다:
업로드 전: 9장의 사진은 최소 3초가 소요됩니다. 스레드 풀 최적화 후 9개의 이미지는 1초가 걸립니다.
멀티 스레드 애플리케이션에서 스레드를 사용하는 것은 다음과 같은 이유로 필요합니다.
1 생성 및 소멸되는 스레드 수를 줄이고 각 작업자 스레드를 재사용하고 여러 작업을 실행할 수 있습니다.
2. 과도한 메모리 소모로 인해 서버가 소진되는 것을 방지하기 위해 시스템 용량에 따라 스레드 풀에서 작동하는 스레드 수를 조정할 수 있습니다. (각 스레드에는 약 1MB의 메모리가 필요하며, 더 많은 스레드가 열리게 됩니다. 너무 크면 더 많은 메모리를 소비하고 결국 충돌이 발생합니다.
스레드 풀은 애플리케이션의 응답 시간을 향상시킵니다. 스레드 풀의 스레드는 준비되어 작업 할당을 기다리고 있으므로 애플리케이션은 새 스레드를 생성하지 않고도 이를 직접 사용할 수 있습니다.
스레드 풀은 CLR이 각 단기 작업에 대해 완전한 스레드를 생성하는 오버헤드를 절약하고 작업이 완료된 후 리소스를 회수할 수 있습니다.
스레드 풀은 현재 시스템에서 실행 중인 프로세스를 기반으로 스레드 시간 조각을 최적화합니다.
스레드 풀을 사용하면 각 스레드에 대한 속성을 설정하지 않고도 여러 작업을 시작할 수 있습니다.
스레드 풀을 사용하면 실행 중인 작업의 프로그램 매개변수에 대한 상태 정보가 포함된 개체 참조를 전달할 수 있습니다.
스레드 풀을 사용하면 특정 요청을 처리하기 위한 최대 스레드 수를 제한하는 문제를 해결할 수 있습니다.
늙은 Fafafa를 달래주세요
스레드 풀의 역할:
스레드 풀의 역할은 시스템의 실행 스레드 수를 제한하는 것입니다.
시스템 환경에 따라 스레드 수를 자동 또는 수동으로 설정하여 최상의 작업 효과를 얻을 수 있습니다. 시스템 리소스를 덜 낭비하고 시스템 혼잡과 비효율성을 유발합니다. 스레드 풀을 사용하여 스레드 수를 제어하고 다른 스레드는 줄을 서서 기다립니다. 작업이 실행된 후 대기열의 맨 앞에 있는 작업이 선택되고 실행이 시작됩니다. 대기열에 대기 중인 프로세스가 없으면 스레드 풀의 이 리소스가 대기 중입니다. 새 작업을 실행해야 할 때 스레드 풀에 대기 중인 작업자 스레드가 있으면 실행을 시작할 수 있습니다. 그렇지 않으면 대기 대기열에 들어갑니다.
싱글쓰레드의 단점
예를 들어주세요
new Thread(new Runnable() { @Override public void run() { paPaPaYourGridFriend(); } }).start();
중요한 말을 세 번 말해보세요! ! !
아직도 새 스레드를 사용하여 비동기 작업을 수행하고 있다면 종료입니다!
아직도 새 스레드를 사용하여 비동기 작업을 수행하고 있다면 종료입니다!
아직도 새 스레드를 사용하여 비동기 작업을 수행하고 있다면 종료입니다!
단점은 다음과 같습니다.
a. 새 스레드가 새 객체를 생성할 때마다 성능이 저하됩니다.
b. 스레드의 통합 관리가 부족하면 무제한의 새 스레드가 생성되고 서로 경쟁하며 너무 많은 시스템 리소스를 차지하여 충돌이나 OOM이 발생할 수 있습니다.
c. 예약 실행, 주기적 실행, 스레드 중단 등 추가 기능이 부족합니다.
Java 스레드 풀
1. newSingleThreadExecutor
단일 스레드 풀을 만듭니다. 이 스레드 풀에는 단 하나의 스레드만 작동하며 이는 모든 작업을 순차적으로 실행하는 단일 스레드와 동일합니다. 유일한 스레드가 비정상적으로 종료되면 새 스레드가 이를 대체합니다. 이 스레드 풀은 모든 작업이 제출된 순서대로 실행되도록 보장합니다.
2.newFixedThreadPool
创建固定大小的线程池。每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小。线程池的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程。
3. newCachedThreadPool
创建一个可缓存的线程池。如果线程池的大小超过了处理任务所需要的线程,
那么就会回收部分空闲(60秒不执行任务)的线程,当任务数增加时,此线程池又可以智能的添加新线程来处理任务。此线程池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者说JVM)能够创建的最大线程大小。
4.newScheduledThreadPool
创建一个大小无限的线程池。此线程池支持定时以及周期性执行任务的需求。
newSingleThreadExecutor
private void TextnewSingleThreadExecutor(){ ExecutorService pool = Executors. newSingleThreadExecutor(); MyTask1 task1 = new MyTask1(); MyTask2 task2 = new MyTask2(); MyTask3 task3 = new MyTask3(); // pool.execute(task1); // pool.execute(task2); // pool.execute(task3); new Thread(task1).start(); new Thread(task2).start(); new Thread(task3).start(); } private class MyTask1 implements Runnable{ @Override public void run() { //循环输出 for(int i = 0; i <h5 id="ScheduledExecutorService">ScheduledExecutorService</h5><p><img src="/static/imghw/default1.png" data-src="https://segmentfault.com/img/remote/1460000015702768" class="lazy" alt=" " title=" "><br></p><h5 id="newFixedThreadPool">newFixedThreadPool</h5><p><img src="/static/imghw/default1.png" data-src="https://segmentfault.com/img/remote/1460000015702769" class="lazy" alt=" " title=" "></p><h5><img src="/static/imghw/default1.png" data-src="https://segmentfault.com/img/remote/1460000015702770" class="lazy" alt=" " title=" "></h5><p style="max-width:90%"><strong>newCachedThreadPool</strong></p><p><img src="/static/imghw/default1.png" data-src="https://segmentfault.com/img/remote/1460000015702771" class="lazy" alt=" " title=" "><br></p><h6 id="相比new-Thread-Java提供的四种线程池的好处在于">相比new Thread,Java提供的四种线程池的好处在于:</h6>
a. 重用存在的线程,减少对象创建、消亡的开销,性能佳。
b. 可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。
c. 提供定时执行、定期执行、单线程、并发数控制等功能。
线程池真的是太好用了,如果在项目中通过线程池管理线程,,你将会发现其中的诸多优势!
阅读更多
20+个很棒的Android开源项目
2018年Android面试题含答案--适合中高级(下)一份完整的Android Studio搭建Flutter教程[](http://mp.weixin.qq.com/s?__b...
深入了解JAVA的线程中断方法经验之总结
子线程为什么不能更新UI线程详解
相信自己,没有做不到的,只有想不到的
相关推荐:
위 내용은 PHP 인터뷰에서 접할 수 있는 스레드 풀에 대한 질문의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

PHP와 Python은 각각 고유 한 장점이 있으며 프로젝트 요구 사항에 따라 선택합니다. 1.PHP는 웹 개발, 특히 웹 사이트의 빠른 개발 및 유지 보수에 적합합니다. 2. Python은 간결한 구문을 가진 데이터 과학, 기계 학습 및 인공 지능에 적합하며 초보자에게 적합합니다.

PHP는 전자 상거래, 컨텐츠 관리 시스템 및 API 개발에 널리 사용됩니다. 1) 전자 상거래 : 쇼핑 카트 기능 및 지불 처리에 사용됩니다. 2) 컨텐츠 관리 시스템 : 동적 컨텐츠 생성 및 사용자 관리에 사용됩니다. 3) API 개발 : 편안한 API 개발 및 API 보안에 사용됩니다. 성능 최적화 및 모범 사례를 통해 PHP 애플리케이션의 효율성과 유지 보수 성이 향상됩니다.

PHP는 서버 측에서 널리 사용되는 스크립팅 언어이며 특히 웹 개발에 적합합니다. 1.PHP는 HTML을 포함하고 HTTP 요청 및 응답을 처리 할 수 있으며 다양한 데이터베이스를 지원할 수 있습니다. 2.PHP는 강력한 커뮤니티 지원 및 오픈 소스 리소스를 통해 동적 웹 컨텐츠, 프로세스 양식 데이터, 액세스 데이터베이스 등을 생성하는 데 사용됩니다. 3. PHP는 해석 된 언어이며, 실행 프로세스에는 어휘 분석, 문법 분석, 편집 및 실행이 포함됩니다. 4. PHP는 사용자 등록 시스템과 같은 고급 응용 프로그램을 위해 MySQL과 결합 할 수 있습니다. 5. PHP를 디버깅 할 때 error_reporting () 및 var_dump ()와 같은 함수를 사용할 수 있습니다. 6. 캐싱 메커니즘을 사용하여 PHP 코드를 최적화하고 데이터베이스 쿼리를 최적화하며 내장 기능을 사용하십시오. 7

PHP와 Python은 각각 고유 한 장점이 있으며 선택은 프로젝트 요구 사항을 기반으로해야합니다. 1.PHP는 간단한 구문과 높은 실행 효율로 웹 개발에 적합합니다. 2. Python은 간결한 구문 및 풍부한 라이브러리를 갖춘 데이터 과학 및 기계 학습에 적합합니다.

PHP는 여전히 역동적이며 현대 프로그래밍 분야에서 여전히 중요한 위치를 차지하고 있습니다. 1) PHP의 단순성과 강력한 커뮤니티 지원으로 인해 웹 개발에 널리 사용됩니다. 2) 유연성과 안정성은 웹 양식, 데이터베이스 작업 및 파일 처리를 처리하는 데 탁월합니다. 3) PHP는 지속적으로 발전하고 최적화하며 초보자 및 숙련 된 개발자에게 적합합니다.

PHP와 Python은 고유 한 장점과 단점이 있으며 선택은 프로젝트 요구와 개인 선호도에 달려 있습니다. 1.PHP는 대규모 웹 애플리케이션의 빠른 개발 및 유지 보수에 적합합니다. 2. Python은 데이터 과학 및 기계 학습 분야를 지배합니다.

PHP는 특히 빠른 개발 및 동적 컨텐츠를 처리하는 데 웹 개발에 적합하지만 데이터 과학 및 엔터프라이즈 수준의 애플리케이션에는 적합하지 않습니다. Python과 비교할 때 PHP는 웹 개발에 더 많은 장점이 있지만 데이터 과학 분야에서는 Python만큼 좋지 않습니다. Java와 비교할 때 PHP는 엔터프라이즈 레벨 애플리케이션에서 더 나빠지지만 웹 개발에서는 더 유연합니다. JavaScript와 비교할 때 PHP는 백엔드 개발에서 더 간결하지만 프론트 엔드 개발에서는 JavaScript만큼 좋지 않습니다.

PHP와 Python은 각각 고유 한 장점이 있으며 다양한 시나리오에 적합합니다. 1.PHP는 웹 개발에 적합하며 내장 웹 서버 및 풍부한 기능 라이브러리를 제공합니다. 2. Python은 간결한 구문과 강력한 표준 라이브러리가있는 데이터 과학 및 기계 학습에 적합합니다. 선택할 때 프로젝트 요구 사항에 따라 결정해야합니다.
