2010-10-24 19:34 多核CPU开几个线程最好

本文介绍了确定服务器端最佳线程数量的方法,主要受到IO和CPU的影响。通过具体公式计算得出,同时也提供了一个简便的计算公式,即CPU数量*2+2。对于嵌入式系统,线程数通常设置为CPU数量到CPU数量的两倍。

影响最佳线程数的主要因素:

1、IO

2、CPU

根据公式:服务器端最佳线程数量=((线程等待时间+线程cpu时间)/线程cpu时间) * cpu数量

一般来说是IO和CPU。IO开销较多的应用其CPU线程等待时间会比较长,所以线程数量可以开的多一些,相反则线程数量要少一些,其实有两种极端,纯IO的应用,比如proxy,则线程数量可以开到非常大(实在太大了则需要考虑线程切换的开销),这种应用基本上后端(比如这个proxy是代理搜索的)的QPS能有多少,proxy就有多少。

另一种是耗CPU的计算,这种情况一般来讲只能开到CPU个数的线程数量。但是并不是说这种应用的QPS就不高,往往这种应用的QPS可以很高。

上面的有点难计算,简便公式是CPU数量 *2 + 2

但是在嵌入式系统CPU一般不是很快的,只要不是纯用作IO的设备,线程数开到CPU个数到CPU个数的2倍就行了。

获取到目标进程PID: 31495 libil2cpp.so 内存映射段(共53段): 段1: 0x000000735ef3f000 - 0x00000073648bf000(长度: 0x0000000005980000) 段2: 0x00000073648bf000 - 0x00000073648c1000(长度: 0x0000000000002000) 段3: 0x00000073648c1000 - 0x00000073648c9000(长度: 0x0000000000008000) 段4: 0x00000073648c9000 - 0x00000073648ca000(长度: 0x0000000000001000) 段5: 0x00000073648ca000 - 0x00000073648ce000(长度: 0x0000000000004000) 段6: 0x00000073648ce000 - 0x00000073648d1000(长度: 0x0000000000003000) 段7: 0x00000073648d1000 - 0x000000736492d000(长度: 0x000000000005c000) 段8: 0x000000736492d000 - 0x000000736492e000(长度: 0x0000000000001000) 段9: 0x000000736492e000 - 0x0000007364932000(长度: 0x0000000000004000) 段10: 0x0000007364932000 - 0x0000007364933000(长度: 0x0000000000001000) 段11: 0x0000007364933000 - 0x0000007364934000(长度: 0x0000000000001000) 段12: 0x0000007364934000 - 0x0000007364935000(长度: 0x0000000000001000) 段13: 0x0000007364935000 - 0x0000007364939000(长度: 0x0000000000004000) 段14: 0x0000007364939000 - 0x000000736493a000(长度: 0x0000000000001000) 段15: 0x000000736493a000 - 0x000000736493b000(长度: 0x0000000000001000) 段16: 0x000000736493b000 - 0x000000736493c000(长度: 0x0000000000001000) 段17: 0x000000736493c000 - 0x0000007364bc1000(长度: 0x0000000000285000) 段18: 0x0000007364bc1000 - 0x0000007364bc2000(长度: 0x0000000000001000) 段19: 0x0000007364bc2000 - 0x0000007365203000(长度: 0x0000000000641000) 段20: 0x0000007365203000 - 0x0000007365204000(长度: 0x0000000000001000) 段21: 0x0000007365204000 - 0x0000007365226000(长度: 0x0000000000022000) 段22: 0x0000007365226000 - 0x0000007365227000(长度: 0x0000000000001000) 段23: 0x0000007365227000 - 0x000000736523c000(长度: 0x0000000000015000) 段24: 0x000000736523c000 - 0x000000736523d000(长度: 0x0000000000001000) 段25: 0x000000736523d000 - 0x0000007365258000(长度: 0x000000000001b000) 段26: 0x0000007365258000 - 0x0000007365259000(长度: 0x0000000000001000) 段27: 0x0000007365259000 - 0x00000073653b7000(长度: 0x000000000015e000) 段28: 0x00000073653b7000 - 0x00000073653b8000(长度: 0x0000000000001000) 段29: 0x00000073653b8000 - 0x0000007366713000(长度: 0x000000000135b000) 段30: 0x0000007366713000 - 0x0000007366714000(长度: 0x0000000000001000) 段31: 0x0000007366714000 - 0x0000007366716000(长度: 0x0000000000002000) 段32: 0x0000007366716000 - 0x0000007366717000(长度: 0x0000000000001000) 段33: 0x0000007366717000 - 0x0000007366e37000(长度: 0x0000000000720000) 段34: 0x0000007366e37000 - 0x0000007366e39000(长度: 0x0000000000002000) 段35: 0x0000007366e39000 - 0x0000007367359000(长度: 0x0000000000520000) 段36: 0x0000007367359000 - 0x000000736735a000(长度: 0x0000000000001000) 段37: 0x000000736735a000 - 0x00000073676c6000(长度: 0x000000000036c000) 段38: 0x00000073676c6000 - 0x00000073676c7000(长度: 0x0000000000001000) 段39: 0x00000073676c7000 - 0x00000073676cb000(长度: 0x0000000000004000) 段40: 0x00000073676cb000 - 0x00000073676cc000(长度: 0x0000000000001000) 段41: 0x00000073676cc000 - 0x00000073676e8000(长度: 0x000000000001c000) 段42: 0x00000073676e8000 - 0x00000073676e9000(长度: 0x0000000000001000) 段43: 0x00000073676e9000 - 0x000000736774b000(长度: 0x0000000000062000) 段44: 0x000000736774b000 - 0x000000736774c000(长度: 0x0000000000001000) 段45: 0x000000736774c000 - 0x00000073677f9000(长度: 0x00000000000ad000) 段46: 0x00000073677f9000 - 0x00000073677fa000(长度: 0x0000000000001000) 段47: 0x00000073677fa000 - 0x0000007368202000(长度: 0x0000000000a08000) 段48: 0x0000007368202000 - 0x0000007368203000(长度: 0x0000000000001000) 段49: 0x0000007368203000 - 0x000000736a4b9000(长度: 0x00000000022b6000) 段50: 0x000000736a4c9000 - 0x000000736b3bd000(长度: 0x0000000000ef4000) 段51: 0x000000736b59f000 - 0x000000736b5a2000(长度: 0x0000000000003000) 段52: 0x000000736b5af000 - 0x000000736b5b4000(长度: 0x0000000000005000) 段53: 0x000000736b5b7000 - 0x000000736b5b9000(长度: 0x0000000000002000) 进程已暂停(PID: 31495) 请输入目标地址(十六进制,例如7B29F2E168): 7366E3C168 请输入要写入的整数值(十进制,例如123456789): 505416143 页备份成功(页起始地址: 0x0000007366e3c000) 成功: 使用syscall 124 刷新缓存 缓存强刷新成功 页已恢复(原始值已写回) 进程已恢复运行(PID: 31495) 进程已恢复运行,正在执行原始逻辑... 恢复后的值: 505416142 验证成功:值已恢复为原始值 成功: 使用syscall 124 刷新缓存 验证成功:CPU执行的是新指令 Hook完成!进程已恢复正常运行 代码成功获取pid 成功暂停进程 成功备份页 成功写入也 成功成功刷新缓存 成功恢复页 成功恢复进程 问题:进程恢复后执行的逻辑不是我修改汇编指令的逻辑 依然是原逻辑 我查询了多个资料 发现是当前进程无法刷新目标进程的指令缓存 有没有靠谱的用户层方案?我具备root环境 解决完确认无报错后完整发给我代码 不要省略
最新发布
07-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值