Explain the difference between concurrency and parallelism, and how would you design a custom thread pool to process tasks?