进程和线程的区别
进程
一个在内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程可以有多个线程
线程
进程中的一个小小单元,负责当前进程中程序的执行,一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可以共享数据
区别总结
线程具有许多进程所具有的特征,故又称轻量级进程。进程是OS分配资源的基本单位,而线程是CPU任务调度和执行的基本单位。
线程池
线程池是由服务器预先创建的一组子线程,线程池中的线程数量应该和 CPU 数量差不多。线程池中的所有子线程都运行着相同的代码,当有新的任务到来时,主线程将通过某种方式选择线程池中的某个子线程来为之服务。相比于动态地创建子线程,选择一个已经存在的子线程的代价显然要小得多。至于主线程选择哪个子线程来为新任务服务,则有多种方式:
主线程使用某种算法来主动选择子线程。最常用的算法是随机算法和 Round Robin (轮流选取)算法,但更优秀、更智能的算法将使任务在各个工作线程中更均匀地分配,从而减轻服务器的整体压力。
主线程和所有子线程通过一个共享的工作队列来同步,子线程都睡眠在该工作队列上。当有新的任务到来时,主线程将任务添加到工作队列中。这将唤醒正在等待任务的子线程,不过只有一个子线程将获得新任务的接管权,它可以从工作队列中取出任务并执行,而其它子线程将继续睡眠在工作队列上。
特点
1.空间换时间,浪费服务器的硬件资源,换取运行效率;
2.池是一组资源的集合,这组资源再服务器启动之初就被完全创建好并初始化,这称为静态资源;
3.当服务器进入正式运行阶段,开始处理客户请求的时候,如果它需要相关的资源,可以直接从池中获取,无需动态分配;
4.当服务器处理完一个客户连接后,可以把相关的资源放回池中,无需执行系统调用释放资源。