Java教程说创建一个Thread很昂贵.但为什么它很贵?创建Java Thread会使其创建成本高昂时究竟发生了什么?我认为这句话是正确的,但我只是对JVM中线程创建的机制感兴趣.
线程生命周期开销.线程创建和拆解不是免费的.实际开销因平台而异,但线程创建需要时间,将延迟引入请求处理,并且需要JVM和OS的一些处理活动.如果请求频繁且轻量级,就像在大多数服务器应用程序中一样,为每个请求创建新线程会占用大量计算资源.
来自Java Concurrency in Practice
作者:Brian Goetz,Tim Peierls,Joshua Bloch,Joseph Bowbeer,David Holmes,Doug Lea
打印ISBN-10:0-321-34960-1
我正在使用Apache Commons DBCP.有一项任务是跟踪DBCP的内部行为 - 活动和空闲连接的数量.
我发现DBCP根本没有任何这样的日志记录.是的,当从池中借用连接时,可以编写输出BasicDataSource状态的代码.但是,在返回或关闭连接时,无法跟踪BasicDataSource的状态,因为连接对象对池没有任何了解.
有任何想法吗?
就所有书籍而言,在任务/进程之间切换比在同一进程/任务的线程之间切换更昂贵.如果是这样,则线程感知OS的调度程序应该以这样的方式调度线程:相同进程/任务的线程应该彼此相邻地执行(分组)并且不与来自其他进程/任务的线程交织.
当我正在阅读有关操作系统的书籍时,所有书籍都停止说明线程切换比流程切换更便宜.就是这样.没有书说明调度程序究竟是如何解决避免在不同任务的线程之间切换的问题.好像这样的问题不存在或对每个读者都是微不足道的.
我对问题的理解不正确吗?或者我错过了什么?为什么在"调度"一章中的每一本操作系统书中都没有涵盖可能性能下降这么大的主题?我读错了书吗?