线程池(Linux高性能服务器编程)
线程池定义
线程池是由服务器预先创建的一组子线程,线程池中的线程数量应该和 CPU 数量差不多。线程池中的所有子线程都运行着相同的代码。
Linux高性能服务器编程 —— 游双 (复习笔记) 线程池定义 线程池是由服务器预先创建的一组子线程,线程池中的线程数量应该和 CPU 数量差不多。线程池中的所有子线程都运行着相同的代码。当有新的任务到来时,主线程将通过某种方式选择线程池中的某一个子线程来为之服务。 主线程选择子线程服务的方式: 主线程和所有子线程通过一个共享的工作队列来同步,子线程都睡眠在该工作队列上。当有新的任务到来时,主线程将任务添加到工作队列中。这将唤醒正在等待任务的子线程,不过只有一个子线程将获得新任务的”接管权“,它可以从工作队列中取出任务并执行之,而其他子线程将继续睡眠在工作队列上。 线程池如何实现?
线程池的特点空间换时间,浪费服务器的硬件资源,换取运行效率。池是一组资源的集合,这组资源在服务器启动之初就被完全创建好并初始化,这称为静态资源。当服务器进入正式运行阶段,开始处理客户请求的时候,如果它需要相关的资源,可以直接从池中获取,无需动态分配。当服务器处理完一个客户连接后,可以把相关的资源放回池中,无需执行系统调用释放资源。线程数量(取决于CPU数量)CPU密集型,线程数和CPU数目相同即可I/O密集型,线程数目可以大一点。 (线程等待时间/线程CPU时间 + 1)* CPU数目具体实现
notify_one()与notify_all() 两者用来唤醒阻塞的线程,线程被唤醒后立即尝试获得锁。 notify_one()因为只唤醒一个线程,不存在锁争用,所以能够立即获得锁。其余的线程不会被唤醒,需要等待再次调用notify_one()或者notify_all()。 notify_all()会唤醒所有阻塞的线程,存在锁争用,只有一个线程能够获得锁。那其余未获取锁的线程继续尝试获得锁(类似于轮询)线程池linux,而不会再次阻塞。当持有锁的线程释放锁时,这些线程中的一个会获得锁。而其余的会接着尝试获得锁。 (编辑:92站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |