작업 (펑터)의 글로벌 공유 대기열이있는 간단한 스레드 풀입니다.스레드 풀 : 실행중인 작업에서 하위 작업을 생성하는 방법?
각 작업자 (스레드)는 작업자로부터 하나의 작업을 선택하여 실행합니다. 이 작업이 끝날 때까지는 다음 작업을 실행하지 않습니다.
자식 작업을 생성하여 데이터를 생성해야하는 큰 작업을 생각한 다음 평가 (예 : 디스크에 저장하기 전에 큰 배열을 정렬)와 같은 작업을 계속할 수 있습니다. 작업 코드의
의사 코드 :
do some stuff
generate a list of child tasks
threadpool.spawn (child tasks)
wait until they were executed
continue my task
작업이 자식 작업을 위해 대기하고 있기 때문에 노동자가 죽은 잠금, 스레드 풀 끝까지 상위 타스크를 기다리는 것이다 문제는 그 중 하나를 실행하기 전에. 어떻게 모든 작업이 효율적으로 실행 된 것을 알 수
threadpool.push (tasks)
while (not all incoming task were executed)
t = threadpool.pop()
t.run()
return (and continue executing parent task)
하지만 :
threadpool.spawn 의사 코드 :
하나의 아이디어는 스폰 코드 내 자식 작업을 실행하는 것입니다 방법?
l = generate a list of child tasks
threadpool.push (l , high priority)
t = create a task to work with generated data
threadpool.push (t , lo priority)
하지만 난이 꽤 방해 발견 ...
어떤 의견 :
작업 의사 코드 :
또 다른 생각은 .. 같은 것을 부모 작업을 분할하는 것입니다?
pd. 메리 크리스마스! pd2. 어떤 나쁜 이름을 편집했습니다.
"문제는 작업이 자식 작업을 기다리고 스레드 풀이 자식 작업을 실행하기 전에 부모 작업이 끝나기를 기다리고 있기 때문에 작업자가 데드 록하게됩니다." - 당신이 만들고있는 가정입니까? 상위 작업이 실행중인 경우에도 하위 작업을 실행할 스레드 풀이 있습니다. Java Executors가이를 수행 할 수 있습니다. –
어떤 종류의 cr * ppy threadpool입니까? 다른 스레드를 실행하기 전에 스레드를 완료해야하는 스레드 풀은 스레드 풀이 아닙니다. –
SB : ofc,하지만 C++에서 직접 스레드 풀을 코딩 중입니다. 직접 그 기능을 구현하는 방법을 묻습니다. –