복붙노트

[SPRING] Spring ThreadPoolTaskExecutor의 corePoolSize와 maxPoolSize의 차이점은 무엇입니까?

SPRING

Spring ThreadPoolTaskExecutor의 corePoolSize와 maxPoolSize의 차이점은 무엇입니까?

나는 massEmails를 웹 사이트의 모든 사용자에게 보내야한다. 발송되는 각 이메일에 대해 스레드 풀을 사용하고 싶습니다. 현재 값을 다음과 같이 설정했습니다.

<property name="corePoolSize" value="500" />
<property name="maxPoolSize" value="1000" />

이 둘의 차이점은 무엇이며 규모는 어떻게됩니까? 현재 나는 약있다. 10000 명의 사용자가 있습니다.

해결법

  1. ==============================

    1.javadoc은 다음과 같이 말합니다.

    javadoc은 다음과 같이 말합니다.

    특정 상황에서 동시에 500 개의 이메일을 보내는 것은 의미가 없으므로 메일 서버를 압도하게됩니다. 많은 수의 전자 메일을 보내야하는 경우 단일 스레드를 사용하고 한 번에 하나씩 파이프를 보냅니다. 메일 서버는 500 개의 개별 연결보다 훨씬 효율적으로 처리합니다.

  2. ==============================

    2.corePoolSize는 풀에서 사용되는 최소 스레드 수입니다. 이 숫자는 maxPoolSize까지 증가 할 수 있습니다. 부하가 떨어지면 풀은 다시 corePoolSize로 축소됩니다.

    corePoolSize는 풀에서 사용되는 최소 스레드 수입니다. 이 숫자는 maxPoolSize까지 증가 할 수 있습니다. 부하가 떨어지면 풀은 다시 corePoolSize로 축소됩니다.

    전자 메일 보내기는 I / O 바운드 작업으로 보입니다. 나는 500 개의 스레드를 사용하는 것이 더 빠를 것이라고 생각하지 않는다.

  3. ==============================

    3.다음은 간단한 용어로 작성된 Sun의 규칙입니다.

    다음은 간단한 용어로 작성된 Sun의 규칙입니다.

    전체 기사

    원점 답변

  4. ==============================

    4.corePoolSize 또는 maxPoolSize의 값을 늘리는 것보다 queueCapacity의 값을 늘리는 것을 고려해야합니다. 이 두 속성 (* PoolSize)은 실행할 풀의 수이지만 각 메시지는 queueCapacity에서 고려할 것입니다

    corePoolSize 또는 maxPoolSize의 값을 늘리는 것보다 queueCapacity의 값을 늘리는 것을 고려해야합니다. 이 두 속성 (* PoolSize)은 실행할 풀의 수이지만 각 메시지는 queueCapacity에서 고려할 것입니다

    <property name="corePoolSize" value="5" />
    <property name="maxPoolSize" value="10" />
    <property name="queueCapacity" value="1000" />
    <property name="waitForTasksToCompleteOnShutdown" value="true"/>
    

    10000 명의 사용자가 1000 * 10 (maxPoolSize) = 10000을 보낼 수 있지만 각 스레드의 1000이 무거울 경우 poolSize를 늘릴 수 있습니다.

  5. from https://stackoverflow.com/questions/1878806/what-is-the-difference-between-corepoolsize-and-maxpoolsize-in-the-spring-thread by cc-by-sa and MIT license