有点晕。
Java Thread 有 NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED 六个状态。
比如一个 blocking method ,在这个等待的过程中,这个 thread 到底是什么状态?到底消耗不消耗 CPU , CPU 会被 schedule 到去执行这个线程吗?
举具体的例子,
不甚感谢!
1
sorra 2016-07-25 14:36:06 +08:00 1
切到等待状态后(通常是 IO)几乎不消耗 CPU 。用于 IO(包括 HTTP)的工作线程属于此类。
另一种情况是等一个锁,会进行自旋,不切到等待状态,略为消耗 CPU 。 但线程多了会消耗内存,还削弱了空间局部性,仍是一种负担。 |
2
sorra 2016-07-25 14:39:20 +08:00
我计划在 www.qingjingjie.com 发表一篇并发编程的文章,但仍未完成。
|
3
final0pro OP |
5
sorra 2016-07-25 15:22:56 +08:00
@final0pro 单纯的自旋是一个 loop ,但一般的实现在 loop 几次后会考虑改变策略。 Java 的 synchronized 就是先自旋几次,不成功就退化为等待。
IO 等待如你所想,之前等待的线程会被通知继续执行。 rss 我尽快写一个 |
7
final0pro OP |
8
sorra 2016-07-26 11:32:54 +08:00
|