免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 蔡万钊
打印 上一主题 下一主题

[C++] [转]ASIO 与协程 [复制链接]

论坛徽章:
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
31 [报告]
发表于 2015-03-05 13:40 |只看该作者
回复 30# yulihua49

我看到的是:

  1. size_t qlz_compress(const void *source, char *destination, size_t size, qlz_state_compress *state)
  2. {
  3.         size_t r;
  4.         ui32 compressed;
  5.         size_t base;
  6. ...
复制代码
你那个版本太老了吧

论坛徽章:
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
32 [报告]
发表于 2015-03-05 14:38 |只看该作者
本帖最后由 yulihua49 于 2015-03-05 15:01 编辑
windoze 发表于 2015-03-05 13:40
回复 30# yulihua49

我看到的是:你那个版本太老了吧

哈哈,想起来了,很久以前改的。
原因是,一个内部的构件为什么让使用者操心呢?
放在栈里是因为要线程安全。
否则就要经常的malloc/free了。
有时还用alloca,好处是不用释放,内存不会泄漏。
有时这样:
int xxx(,,,int size)
{
char buf[size];
.....

看来还是我的问题。不过,我这样的用户不少啊,还是别限制了。

论坛徽章:
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
33 [报告]
发表于 2015-03-05 15:50 |只看该作者
本帖最后由 windoze 于 2015-03-05 15:53 编辑

回复 32# yulihua49

你不需要经常malloc/free的,这个qlz_state_compress是可以重用的,反正你在一个连接上同时只能做一个针对流的压缩/解压操作对不?也就是说,创建一个链接的时候分配一个(或者两个,如果是全双工通信),然后你就每次重用它就好了。
频繁访问同一个内存区域对于cache locality是有好处的,这一点与内存是在stack上还是在heap上无关(话说CPU哪知道),你的做法每次创建在stack上反而会比较慢,因为你每次调用这个函数的时候stack位置不一定一样,还需要flush cache。

论坛徽章:
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
34 [报告]
发表于 2015-03-06 10:33 |只看该作者
本帖最后由 yulihua49 于 2015-03-06 10:48 编辑
windoze 发表于 2015-03-05 15:50
回复 32# yulihua49

你不需要经常malloc/free的,这个qlz_state_compress是可以重用的,反正你在一个连 ...

考虑一下,结果:
如果10000个TCB并发连接,就需要5.3G的内存,如果内存不足,引起大规模换页。相比之下,cache不命中就是个芝麻。
各个TCB是交替工作的,cache必然不命中。
使用栈,只有线程数*2个,即使每个栈大一些,也占不了多少内存。在IO瓶颈的应用中,使用AIO技术使得线程可以很少。如果不用AIO,线程数就需要比较多。比如我的交易管理器,就是在前后台之间转发消息,管理资源,安全隔离,承担大量的客户端接入。计算量很少,用个小机器即可。难道还要弄个多少多少G内存,多少多少核?
况且,C最令人讨厌的就是内存泄漏和内存违例。也为了线程安全,还是主张在可控的范围内尽量使用栈,少用堆。
(栈溢出比较好查,堆违例真是整死人,你很难搞清哪出的问题。)

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:58:11数据库技术版块每日发帖之星
日期:2015-08-30 06:20:00
35 [报告]
发表于 2015-03-06 14:34 |只看该作者
stack 上的内存分配就是移动 ESP 指针的问题. 在堆上面分配释放开销可就很大了.

PS: 我没跑啊!

论坛徽章:
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
36 [报告]
发表于 2015-03-06 14:46 |只看该作者
回复 35# 蔡万钊

你没考虑到缺页……

论坛徽章:
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
37 [报告]
发表于 2015-03-06 14:47 |只看该作者
本帖最后由 yulihua49 于 2015-03-06 14:49 编辑
蔡万钊 发表于 2015-03-06 14:34
stack 上的内存分配就是移动 ESP 指针的问题. 在堆上面分配释放开销可就很大了.

PS: 我没跑啊!

开销倒也不算太大,主要是多线程时互斥。tcmalloc好一些。

论坛徽章:
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
38 [报告]
发表于 2015-03-07 19:17 来自手机 |只看该作者
你弄 HIFI吗?你的关于jitter的文我转到家电论坛了。

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:58:11数据库技术版块每日发帖之星
日期:2015-08-30 06:20:00
39 [报告]
发表于 2015-03-08 09:14 |只看该作者
回复 38# yulihua49


    !!!!!!!!!!

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:58:11数据库技术版块每日发帖之星
日期:2015-08-30 06:20:00
40 [报告]
发表于 2015-03-08 09:23 |只看该作者
回复 38# yulihua49


    懒得搭理那些人了, 说 PC jitter 大真无知, CPU 每个周期的时间也就一百多皮秒. 有个 100ps 的 jitter CPU 早死机了. 说明主板早就早就可以产生 jitter 非常非常小的时钟信号了. 还说主板时钟不如那些外置的垃圾 DAC ?  小于100ps 人耳真的能辨别?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP