[问题] 大量连线数如何降低I/O 提升传输速度

楼主: sunfox ( )   2019-05-02 17:43:06
提供服务的主机 会跑很多数据出来
外网 client端(windows ) 执行连线程式
向提供服务主机发出连线需求...
主机会启动一只程式供client 建立连线
连线建立后 主机就开始透过Socket主动且持续的传送数据到外网 windows client
如果外网有一千个client端要连线
主机上同样的程式会执行一千只
最近在检讨这样的系统是不是能有更好的设计
因为系统会花时间在程式的start 与 stop
如果说 外网client的的程式有50000只
在三个小时的时间内 都一直有client 程式 上上下下 (执行与关闭)
这样在IO 上与建立连线时 会浪费很多时间与机器的效能
要怎样去改写这样的架构
让速度变快 时间变短 效能更好
我想到的是 如 FTP
1000个人连FTP server FTP程式也不会跑1000只啊
apache 也是
谁能给我一个方向与概念
谢谢
PS 主机端的连线程式是C写的
作者: tjjh89017 (伊达政宗)   2019-05-02 18:00:00
Event driven的方式?
作者: ckvir (ckvir)   2019-05-05 04:52:00
好奇的问一下 一般 server 不是都开一个process 等client,为什么会写成只要有client 就开一个process?不是应该一个process等client ,有 client 再开thread?
作者: tjjh89017 (伊达政宗)   2019-05-06 03:41:00
开跟关process的成本都很高,所以有时候会先开起来放,有些则是一个thread负责很多client
作者: leolarrel (真.粽子无双)   2019-05-11 12:02:00
参考apache 的设计
作者: dces4212 (flawless)   2019-05-13 00:58:00
threadpool
作者: wens (文思)   2019-05-14 00:04:00
这不是经典题目吗? C10K
作者: shooter555 (shooter)   2019-05-22 16:11:00
没写过大量连线的service 好奇问一下 threads不会爆吗不是有数量上限在同一只process内喔喔 查了一下c10k linux就是用epoll
作者: WPC001 (好闷, 迷惘~~)   2019-05-22 21:30:00
threadpool +1
作者: wens (文思)   2019-06-04 14:19:00
一直开关 thread 也是有成本的
作者: dennisxkimo (Dennis(一上B就糟糕))   2019-06-07 23:13:00
这种需求个人服务会想走WebService,提供Client API

Links booklink

Contact Us: admin [ a t ] ucptt.com