学过操作系统之后,在我的理解,要想多个任务并发。则只有使用多进程,或者是多线程的技术。
而这些是否并行则完全由CPU的核心数决定,但是有一点,它们之间的执行不会相互阻塞。
这为处理多任务问题提供了一个解决办法。但是同时我也了解到,使用多线程和多进程都是有代价的。
这些额外的代价有下面三个:
+ 创建线程
+ 销毁进程
+ 上下文切换
在这三个额外的开销当中,上下文切换是不可避免的。要想达到多个进程并发,必须接受这点。
不过相对于进程,线程在上面这些开销当中,相对比较小。在现在的应用需求中,这些额外的开销成为了瓶颈。
典型的有数据库连接,web服务器。
线程池的概念,简单的叙述很简单。就是循环执行一些线程。当有任务的时候,就用这些线程中的空闲线程来执行。
原来是来一个任务,就创建一个线程,执行结束之后就销毁线程。当这些线程的执行时间很小的时候,
上面列出来的3点额外开销就影响很大了。使用线程池技术可以很好解决这个问题。在一个“池”当中,
固定执行着预先设定的线程。再设计一个任务队列,当线程池中的任务执行完成之后,就向任务队列中调入任务。
当有新的任务来临的时候,就往任务队列中添加任务。相比多线程的技术,它减少了创建线程和销毁线程的时间。
不过我觉得载入任务应该也是需要一些时间的吧,因此和多线程的上下文切换时间抵消。
线程池技术适合大量小任务的执行。