- 主题:Re: 主题:求教,c++程序库是如何调用sleep而线程并不挂起的呢
什么叫没有挂起?疯狂占CPU?
【 在 stub 的大作中提到: 】
: 刚在ubuntu上测试brpc, 测试代码中包含了sleep, 而通过打印线程id发现,线程并没有挂起。
: 我理解, 调用sleep类函数时, 最终会执行int 0x80 (或sysenter)进入内核态,然后把自己放到等待队列上。 一直到sleep时间到来之前不会被调度。 然而测试brpc时的现象明显不是这样。
: --
: ...................
--
FROM 103.238.135.*
【 在 GoGoRoger 的大作中提到: 】
: 什么叫没有挂起?疯狂占CPU?
就是在sleep时间内还是在被调度
--
FROM 112.65.12.*
描述不准确。是我自己写的this_hread::sleep 可以确认sleep被调用了,早上到公司贴下代码
--
FROM 112.65.12.*
打印函数唤醒了吧
查看线程是否休眠,用命令行查看就行了啊,为什么要去打印
--
FROM 24.59.251.*
是在bthread上sleep的吧,多bthread会共享线程,看下n:m那的说明
【 在 stub 的大作中提到: 】
: 刚在ubuntu上测试brpc, 测试代码中包含了sleep, 而通过打印线程id发现,线程并没有挂起。
: 我理解, 调用sleep类函数时, 最终会执行int 0x80 (或sysenter)进入内核态,然后把自己放到等待队列上。 一直到sleep时间到来之前不会被调度。 然而测试brpc时的现象明显不是这样。
- 来自「最水木 for iPhone12,1」
※ 修改:·wtl 于 Apr 21 02:20:23 2021 修改本文·[FROM: 115.171.60.*]
※ 来源:·最水木 客户端·[FROM: 115.171.60.*]
修改:wtl FROM 115.171.60.*
FROM 115.171.60.*
蹲一个更新。关键就是你调用的是this_thread().sleep还是brpc提供的sleep。理论上还可以是链接的时候截获了,但我盲猜brpc不至于这么霸道
【 在 stub 的大作中提到: 】
: 刚在ubuntu上测试brpc, 测试代码中包含了sleep, 而通过打印线程id发现,线程并没有挂起。
: 我理解, 调用sleep类函数时, 最终会执行int 0x80 (或sysenter)进入内核态,然后把自己放到等待队列上。 一直到sleep时间到来之前不会被调度。 然而测试brpc时的现象明显不是这样。
- 来自「最水木 for iPhone12,8」
--
FROM 75.31.75.*
协程的sleep是不挂起的,不过在C++上玩协程可不是一般的作死
【 在 stub 的大作中提到: 】
: 刚在ubuntu上测试brpc, 测试代码中包含了sleep, 而通过打印线程id发现,线程并没有挂起。
: 我理解, 调用sleep类函数时, 最终会执行int 0x80 (或sysenter)进入内核态,然后把自己放到等待队列上。 一直到sleep时间到来之前不会被调度。 然而测试brpc时的现象明显不是这样。
--
FROM 155.64.23.*
同觉着
【 在 wtl 的大作中提到: 】
: 是在bthread上sleep的吧,多bthread会共享线程,看下n:m那的说明
:
: 【 在 stub 的大作中提到: 】
: ...................
--
FROM 43.243.12.*
【 在 lambdai 的大作中提到: 】
: 蹲一个更新。关键就是你调用的是this_thread().sleep还是brpc提供的sleep。理论上还可以是链接的时候截获了,但我盲猜brpc不至于这么霸道
: - 来自「最水木 for iPhone12,8」
前者
--
FROM 112.65.12.*
【 在 GoGoRoger 的大作中提到: 】
: 同觉着
按wiki应该是这样,但是求教下怎么做到的..
--
FROM 112.65.12.*