2
아래의 진행률 함수는 내 작업자 함수입니다. 생성/획득하는 데 비용이 많이 드는 클래스에 액세스 할 수 있어야합니다. 이 라이브러리에 대한 스레드 로컬 변수에 대한 표준 기계가 있습니까? 또는 객체 풀 관리자를 직접 작성해야합니까?스칼라 병렬 컬렉션 : 작업자 스레드에 스레드 로컬 변수가있는 관용적 방법
object Start extends App {
def progress {
val current = counter.getAndIncrement
if(current % 100 == 0) {
val perc = current.toFloat * 100/totalPosts
print(f"\r$perc%4.2f%%")
}
}
val lexicon = new Global()
def processTopic(forumId: Int, topicId: Int) {
val(topic, posts) = ProcessingQueries.getTopicAndPosts(forumId,topicId)
progress
}
val (fid, tl) = ProcessingQueries.getAllTopics("hon")
val totalPosts = tl.size
val counter = new AtomicInteger(0)
val par = tl.par
par.foreach { topic_id =>
processTopic(fid,topic_id)
}
}
ThreadLocal에서 initialValue를 재정 의하여 더 정돈 할 수 있습니다. 그렇게하면 get/set 논리를 수행 할 필요가 없습니다. –