免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 36070 | 回复: 10
打印 上一主题 下一主题

[C] 我决定用C#写服务器 [复制链接]

论坛徽章:
35
双子座
日期:2014-05-09 17:56:38程序设计版块每日发帖之星
日期:2015-08-30 06:20:00程序设计版块每日发帖之星
日期:2015-12-24 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-27 11:07:07程序设计版块每日发帖之星
日期:2016-01-12 06:20:0015-16赛季CBA联赛之北京
日期:2016-01-15 01:01:2115-16赛季CBA联赛之浙江
日期:2016-01-15 22:38:20程序设计版块每日发帖之星
日期:2016-01-18 06:20:00每日论坛发贴之星
日期:2016-01-18 06:20:0015-16赛季CBA联赛之北控
日期:2016-01-30 21:43:01程序设计版块每日发帖之星
日期:2016-02-08 06:20:0015-16赛季CBA联赛之山西
日期:2016-02-20 10:54:41
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2019-12-11 12:04 来自手机 |只看该作者 |倒序浏览
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
2 [报告]
发表于 2019-12-12 08:28 |只看该作者
C++有协程就好了(听说快了),写你这种应用就很舒服

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
3 [报告]
发表于 2019-12-15 19:43 |只看该作者
本帖最后由 yulihua49 于 2019-12-15 19:47 编辑
bruceteen 发表于 2019-12-12 08:28
C++有协程就好了(听说快了),写你这种应用就很舒服

正确的说,不是C++,而是在哪个操作系统。
LINUX有,ucontext,我已经用了好几年了。
man makecontext 试试看

MAKECONTEXT(3)                                                            Linux Programmer's Manual                                                            MAKECONTEXT(3)

NAME
       makecontext, swapcontext - manipulate user context

SYNOPSIS
       #include <ucontext.h>

       void makecontext(ucontext_t *ucp, void (*func)(), int argc, ...);

       int swapcontext(ucontext_t *oucp, const ucontext_t *ucp);

DESCRIPTION
       In  a  System  V-like environment, one has the type ucontext_t defined in <ucontext.h> and the four functions getcontext(3), setcontext(3), makecontext() and swapcon-
       text() that allow user-level context switching between multiple threads of control within a process.

       For the type and the first two functions, see getcontext(3).

       The makecontext() function modifies the context pointed to by ucp (which was obtained from a call to getcontext(3)).  Before invoking makecontext(), the  caller  must
       allocate a new stack for this context and assign its address to ucp->uc_stack, and define a successor context and assign its address to ucp->uc_link.

       When  this context is later activated (using setcontext(3) or swapcontext()) the function func is called, and passed the series of integer (int) arguments that follow
       argc; the caller must specify the number of these arguments in argc.  When this function returns, the successor  context  is  activated.   If  the  successor  context
       pointer is NULL, the thread exits.

       The swapcontext() function saves the current context in the structure pointed to by oucp, and then activates the context pointed to by ucp.

RETURN VALUE
       When successful, swapcontext() does not return.  (But we may return later, in case oucp is activated, in which case it looks like swapcontext() returns 0.)  On error,
       swapcontext() returns -1 and sets errno appropriately.

ERRORS
       ENOMEM Insufficient stack space left.

VERSIONS
       makecontext() and swapcontext() are provided in glibc since version 2.1.


评分

参与人数 1可用积分 +20 收起 理由
飘絮絮絮丶 + 20 赞一个!

查看全部评分

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
4 [报告]
发表于 2019-12-16 08:59 |只看该作者
回复 3# yulihua49

是的,谢谢!
每个操作系统都有自身的协程,比如windows也有 ConvertThreadToFibe 等等。
但只有协程与C++语法相结合,才能简单好用。比如 https://zh.cppreference.com/w/cpp/language/coroutines

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
5 [报告]
发表于 2019-12-16 21:40 |只看该作者
本帖最后由 yulihua49 于 2019-12-16 21:49 编辑
bruceteen 发表于 2019-12-16 08:59
回复 3# yulihua49 是的,谢谢!每个操作系统都有自身的协程,比如windows也有 ConvertThreadToFibe 等等。 ...

看了,这些功能都是自己写。因为有特殊需求,没有用这个。
自己写,资源控制更细致。
比如,写一个FPC(Fiber Per Connection)+线程池服务器, 如果同时受理10000个连接,就需要10000个Fiber,10000个用户栈。每个栈2M,就需要20G的内存,目前并不是很经济。
这时,我要写的协程管理,就采用了栈池技术,就是只有有限个栈,目前是=线程数。只有活动的连接,才给分配栈。连接状态,没有发出请求的,不给栈。发出请求的,分配栈,任务完成,回收栈。
这就只有自己写协程了。
线程池协程,有n个线程,+ n个协程栈,基本是2n个栈。实际上还要多一些,多不了多少。。

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
6 [报告]
发表于 2019-12-30 22:40 |只看该作者
啊呀呀呀这么久了大家还在纠结fiber这种事吗?话说连C++都有stackless coroutine了……

所以想搞dotnet就去用C#,想搞JVM的就去用kotlin,还想用C++的……就去搞Rust吧……
--
我算是在拆我自己的台吗?

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
7 [报告]
发表于 2020-01-04 20:41 |只看该作者
本帖最后由 yulihua49 于 2020-01-04 20:43 编辑
windoze 发表于 2019-12-30 22:40
啊呀呀呀这么久了大家还在纠结fiber这种事吗?话说连C++都有stackless coroutine了……所以想搞dotnet就去 ...

不搞stackless,没法用。
我搞栈池。
那年跟你争论之后,栈池技术已经应用数年,非常可靠。允许应用插件任意设定栈尺寸。

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
8 [报告]
发表于 2020-01-05 01:32 |只看该作者
回复 7# yulihua49

已有的代码当然不要改了,跑得好好的动它干嘛。不过新项目还是可以看看新技术的,干这行不就是活到老学到老。

论坛徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
9 [报告]
发表于 2020-01-06 16:00 |只看该作者
回复 6# windoze

什么情况啊大佬,Rust到底行不行。。

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
10 [报告]
发表于 2020-01-07 22:29 |只看该作者
回复 9# pandaiam

Rust肯定到了可以拿来写东西的阶段,不过说实话这个语法实在是让人有点吐槽不能,每次看见那些个'a 'b总有点生理上的不适感。如果不是特别计较性能的项目还是用省事的东西吧,我瞅着C#8就不错。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP