加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

golang协程资源占有率

发布时间:2020-12-16 18:31:50 所属栏目:大数据 来源:网络整理
导读:GO版本:go version go1.4.2 linux/amd64 执行协程只需要极少的栈内存(大概是4~5KB),默认情况下,线程栈的大小为1MB。 Apache。 持续几秒的短期连接,比如快速事务,如果每秒处理1000个事务,只有约1000个并发连接到服务器。 事务延长到10秒,要维持每秒

GO版本:go version go1.4.2 linux/amd64

执行协程只需要极少的栈内存(大概是4~5KB),默认情况下,线程栈的大小为1MB。

Apache。
持续几秒的短期连接,比如快速事务,如果每秒处理1000个事务,只有约1000个并发连接到服务器。
事务延长到10秒,要维持每秒1000个事务,必须打开1万个并发连接。这种情况下:尽管你不顾DoS攻击,Apache也会性能陡降;同时大量的下载操作也会使Apache崩溃。
如果每秒处理的连接从5千增加到1万,你会怎么做?比方说,你升级硬件并且提高处理器速度到原来的2倍。发生了什么?你得到两倍的性能,但你没有得到两倍的处理规模。每秒处理的连接可能只达到了6000。你继续提高速度,情况也没有改善。甚至16倍的性能时,仍然不能处理1万个并发连接。所以说性能和可扩展性是不一样的。
问题在于Apache会创建一个CGI进程,然后关闭

?
1
2
3
4
5
6
7
8
9
10
11
12
[root@localhostmpro] #more/proc/cpuinfo|grep"modelname"
modelname:Intel(R)Core(TM)i5-4590CPU@3.30GHz
modelname:Intel(R)Core(TM)i5-4590CPU@3.30GHz
modelname:Intel(R)Core(TM)i5-4590CPU@3.30GHz
modelname:Intel(R)Core(TM)i5-4590CPU@3.30GHz
[root@localhostmpro] #
[root@localhostmpro] #grepMemTotal/proc/meminfo
MemTotal:3868776kB
[root@localhostmpro] #getconfLONG_BIT
64
[root@localhostmpro] #more/etc/redhat-release
CentOSLinuxrelease7.1.1503(Core)

测试用例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
packagemain
import(
"time"
)
funcmain(){
for i:=0;i<200000;i++{
gofunc(){
time .Sleep(5* time .Second)
}()
}
time .Sleep(10* time .Second)
}

执行程序前:

?
1
2
3
4
5
top -18:53:19up19min,3 users ,loadaverage:0.00,0.04,0.11
Tasks:522total,1running,521sleeping,0stopped,0zombie
%Cpu(s):0.1us,0.2sy,0.0ni,99.6 id ,0.0wa,0.0hi,0.1si,0.0st
KiBMem:3868776total,3327732 free ,235764used,305280buff /cache
KiBSwap:2097148total,2097148 free ,0used.3397344availMem

执行程序后:

?
1
2
3
4
5
top -18:53:37up19min,0.11
Tasks:524total,523sleeping,0zombie
%Cpu(s):1.2us,10.6sy,88.2 id ,2793732 free ,752512used,322532buff /cache
KiBSwap:2097148total,0used.2880016availMem

总结:20万个协程占用了500M内存 50万KB

平均一个协程占用2.5KB

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读