首页
社区
课程
招聘
[求助]线程的耗时操作有哪些?
发表于: 2014-9-8 15:06 5817

[求助]线程的耗时操作有哪些?

2014-9-8 15:06
5817
线程上下文切换,回耗时间,

还有什么操作会导致线程耗时间?

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 1832
活跃值: (4055)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
Sleep()之外的代码都耗时
2014-9-8 18:59
0
雪    币: 54
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
你的结论是从什么地方得到的 ?

发你的出处
2014-9-8 19:08
0
雪    币: 538
活跃值: (269)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
从高性能服务器角度来说,各种锁(包括各种显示和隐含的锁),各种IO和内核调用都是性能消耗的地方
2014-9-8 23:36
0
雪    币: 54
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
那么线程的状态切换,线程自身被系统切换,

比如由 就绪到运行, 运行到堵塞,这些,哪个比较耗时间?
2014-9-9 12:07
0
雪    币: 560
活跃值: (959)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
线程创建和启动 最耗时
2014-9-9 15:38
0
雪    币: 54
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
线程被堵塞,是不是都由用ring3切换到ring0 ?
2014-9-9 16:12
0
雪    币: 538
活跃值: (269)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
这些问题如果楼主从逆向的角度来看的话就会很明白了.比如线程进入临界区的时候阻塞的情况,EnterCriticalSection的流程是这样的:先判断条件变量,如果发现锁已经被其他线程抢占,那么调waitsingleobject等待一个event,当其他线程释放临界区的时候那么就会触发这个event,这个时候当前线程就会从waitsingleobject返回继续尝试获取锁直到成功.这其中涉及有几个内核调用的(内核调用顾名思义要ring0-ring3切换)createevent,setevent,waitsingleobject

可能有的地方不一定对,但基本概念就这么个意思,具体权威详细的资料可参考论坛里其他地方.
2014-9-9 16:53
0
雪    币: 560
活跃值: (959)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
WaitForSingleObject ->
WaitForSingleObjectEx->

ZwWaitForSingleObject->

KiFastSystemCall->RING0
2014-9-9 18:03
0
雪    币: 54
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
追加一个问题:

由于windows有内核线程。

那么请问,如果一个内核线程,那么是不是就不用从ring3到ring0的来回切换了?
2014-9-9 20:18
0
雪    币: 538
活跃值: (269)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
是的.听说过有人为了提高服务器性能将代码都放到驱动里面实现.
2014-9-9 21:17
0
游客
登录 | 注册 方可回帖
返回
//