社区
C语言
帖子详情
在客户/服务器模式中,服务器程序使用进程池,如何进行资源的调度?
bicbasic
2000-07-11 12:12:00
比如,我的服务器程序预先起10个子进程,如果同时来了15个服务,这时需要再起几个
子进程,我的问题是,我如何知道我的10个子进程现在是忙是闲?如果所有进程都忙,
我需要增加子进程,如果大部分进程都空闲,我需要下调一部分子进程,这是进程调度的问题,请高手指教。
...全文
200
5
打赏
收藏
在客户/服务器模式中,服务器程序使用进程池,如何进行资源的调度?
比如,我的服务器程序预先起10个子进程,如果同时来了15个服务,这时需要再起几个 子进程,我的问题是,我如何知道我的10个子进程现在是忙是闲?如果所有进程都忙, 我需要增加子进程,如果大部分进程都空闲,我需要下调一部分子进程,这是进程调度的问题,请高手指教。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
pbi
2000-07-18
打赏
举报
回复
如果是在NT上进行多线程的服务器程序开发,可以使用NT的IO完成端口(IOCompletionPort),该对象可以解决线程的调度问题。
hibor
2000-07-18
打赏
举报
回复
我这段时间也在写一个C/S模式的程序的服务器端,先前也遇到了和你一样的问题。许多用户一起发出请求时原来是来一个响应一次,后来在测试1000个用户时发现CPU再也无能为力了,于是我改变策略。
在配置文件里设置了一个最大用户数(因为我知道任何系统都有他的负载极限)当然不只是1000个,在启动时我会预先启动一批服务线程大约是25%这些都放置于一个全局的空闲资源量表里(链表或是数组一定要进行互次访问)当来一个请求之后我会从那个空闲资源表里取一个出来,若没有了多余的了则根据当前的已运行的服务线程数来决定是不是继续启动线程。若实在没有了则只好和这位用户说BYE BYE。
在每个线程结束之后将其再次放到空闲队列里等待下一个用户请求,要注意一点对于空闲的线程调度如取出,放入等一定要是互次式访问,另外还要考虑一点一定要注意服务器的可管理性,就是能够在第三方进行控制(手动控制或是按一个策略自动控制)来保持服务器尽可能的始终运行在稳定的环境中。
欢迎来信共同探讨服务器的设计技巧inused@163.net
vagabond
2000-07-12
打赏
举报
回复
使用动态进程调度服务,非常的复杂。我建议使用静态的进程调度。在实际的使用中,预先指定进程数,基本可以满足你的实际要求。当所有的进程忙时,可以让一些服务稍侯。
如果坚持要使用动态进程调用,则以下的建议供参考:
1。建立超级进程,进行调用管理。
2。服务进程和超级进程可使用信号灯和共享内存通信。即服务进程都阻塞在accept,由
系统进行调度。当服务进程激活时,先通知超级进程,再进行服务。当服务完成时,也通知超级进程。
3。超级进程通过2知道所有的进程的工作状态。可以采用以下的策略进行管理:
1)如果长时间服务进程的工作不饱满,可以削减服务进程数,(所有的服务进程都通过fork由超级进程派生,可以直接发SIGKILL,或自己定义一个信号)
2)当长时间工作饱满,则增加服务进程
3)应设置最小服务进程和最大服务进程。
4)建议可以使用pthread库,采用线程技术,这样在性能上要好一些。
bicbasic
2000-07-11
打赏
举报
回复
我的问题是,每个子进程都是一个叠代服务器,如何动态的调度子进程的个数,使得本服务器效率高,耗资源少?
WHQ
2000-07-11
打赏
举报
回复
如果来了一千个请求你也要是创建一千个进程?这样对资源的消耗及性能的降低是不是太大了?
我觉得比较合理的是先创建固定数目的进程(线程),并且把所有的客户请求都放入到一个大家共享的队列中,所有这些进程(线程)不停地从这个队列中取出用户的请求并进行处理(当然队列为空时应该让所有进程(线程)阻塞以减少对系统资源的消耗)
打通Linux脉络系列:
进程
、线程和
调度
本课程分成4个组成部分,每次课60分钟,每次课后留下3-4个练习题,可以在Linuxer公众号留言讨论答案和做题心得。第一部分:深入彻底搞清楚
进程
生命周期,
进程
生命周期创建、退出、停止、以及僵尸是个什么意思;第二部分:深入分析
进程
创建的写时拷贝技术、以及Linux的线程究竟是怎么回事(为什么称为轻量级
进程
),此部分也会搞清楚
进程
0、
进程
1和托孤,以及睡眠时的等待队列;第三部分:搞清楚Linux
进程
调度
算法,不同的
调度
策略,实时性,完全公平
调度
算法;第四部分:讲解Linux多核下CPU、
中
断、软负载均衡、cgroups
调度
算法以及Linux为什么不是一个实时操作系统。
云计算学习笔记5——集群
资源
调度
策略
一、
资源
调度
策略 多用户多作业的环境下,如何将集群
资源
在它们之间
进行
分配,需要特定的策略。 FIFO 公平
调度
器 能力
调度
器 延迟
调度
策略 主
资源
公平
调度
策略 1. FIFO 最简单的
资源
调度
策略。 提交的作业,按照提交时间先后顺序,或者优先级次序,将其放入线性队列相应位置,先进先出
调度
和分配
资源
。 缺点:多用户场景下,新加入的作业容易出现长时间等待
调度
的现象。 2. 公平
调度
器 Facebook为Hadoop开发的多用户多作业
调度
器。 用户的任务分配到多个
资源
池
(pool)。 每个
计算机操作系统实验:
进程
调度
实验
介绍了一个
使用
C语言编写的
进程
调度
程序,它模拟了优先级
调度
算法的原理和效果。文章首先说明了实验的目的,即加深对
进程
和
进程
调度
算法的理解,以及实验的要求,即
使用
某种编程语言
进行
算法模拟。然后介绍了实验的原理,即
使用
优先级
调度
算法来分配处理机给优先级最高的
进程
,并根据
进程
的执行情况来改变其优先级。接着给出了一个例题,并对其
进行
了分析、编码和运行。在分析
中
,说明了程序
中
定义了
进程
的PCB结构体和一些函数,用来实现
进程
的创建、运行、改变状态和优先级等功能。在编码
中
,展示了程序的完整代码,并指出了其
中
的一处错误并
linux c
进程
池
简单实现
进程
池
&&线程
池
在面向对象程序编程
中
,对象的创建与析构都是一个较为复杂的过程,较费时间,所以为了提高程序的运行效率尽可能减少创建和销毁对象的次数,特别是一些很耗
资源
的对象创建和销毁。 所以我们可以创建一个
进程
池
(线程
池
),预先放一些
进程
(线程)进去,要用的时候就直接调用,用完之后再把
进程
归还给
进程
池
,省下创建删除
进程
的时间,不过当然就需要额外的开销了。 利用线程
池
与
进程
池
可以...
资源
池
(从内存
池
到连接
池
)
在编程的世界里,经常会遇到连接
池
,那连接
池
到底是什么呢? 什么是
池
?
池
,一种
资源
抽象的形象化说法。编程世界
中
的
池
是一组
资源
, 可以随时
使用
, 但不随时地创建和释放。
资源
池
(resource pool)被认为是一种设计
模式
,这里的
资源
主要是指系统
资源
, 这些
资源
不专属于某个
进程
或内部
资源
。
客户
端向
池
请求
资源
, 并
使用
返回的
资源
进行
指定的操作。当
客户
端
使用
完
资源
后, 会把
资源
放回
池
中
而不是释
C语言
69,369
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章