作者回复: 👍
作者回复: 这样开发出来的也就不会是一个可以满足高并发的web应用😁 也就不会有我们标题提出的问题~
这个专栏的大部分文章都试图在一篇较小的篇幅内讲完整一个较大的问题场景,这样就会有一些绝对化和理想化,后面的文章也会有类似的情况😢
这也真是我在开篇词想要表达的意图,我们在构建自己的知识体系时,不追求细节的完整和绝对的严谨,而是在大的方向上建起支撑性的知识支柱。细节的缺失和瑕疵在未来的学习和实践中完善。
当然也欢迎大家在评论中指出各种问题,有兴趣的同学参与讨论,我们在评论区就完成部分知识的深入和完善。
感谢🌹
作者回复: 清晰👍
作者回复: 👍
作者回复: 也许可以将来以彩蛋的方式专门写一篇文章讲讲~
作者回复: JVM是一个进程;tomcat是一个框架;tomcat会启动线程处理应用请求,执行应用的代码;应用自己不能跑起来的,只能被tomcat的线程执行,应用在tomcat线程中执行时,也可以自己启动线程,并发、异步执行自己的某些计算。
tomcat会对不同应用做一些隔离,但是如果某个应用导致JVM crash,所有应用都crash。
可参考后续专栏《JVM虚拟机原理》
作者回复: 1 多个协程通过自我调度复用同一个线程,所以某个协程IO等待的时候,会导致整个线程阻塞,并不能避免线程切换。更好的做法是使用异步IO,不要IO等待。
能否抢到时间片是操作系统调度的,协程自己控制不了,但是协程利用自己更轻量级,配合异步IO等方法,可以提高运行效率,整体性能得到优化。
2 是的。但是用好协程,减少额外的线程调度切换,可以提高整体的系统吞吐能力。
作者回复: tomcat是一个程序,被JVM加载到JVM进程中。
Tomcat的代码在JVM被执行后,可以启动很多线程。
作者回复: 1 取决于CPU的核数
2 线程比进程占据的资源少,切换代价小,而且进程内线程可能执行相同的代码,切换线程后也许还可以复用CPU cache数据
3 线程切换和进程切换只依赖CPU是否空闲,和线程进程彼此没关系
PS,上面回复内容其实我也没有确切的资料证实,我是根据第一性原理推导出来的,我觉得仅根据专栏文章内容就可以推导出来,我希望你也可以自己分析推导,这样获得的知识会更加稳固