• QQ怪
    2019-06-29
    @正是那朵玫瑰同学,我认为老师所说的耗费cpu资源指的是线程阻塞和等待进行额外的上下文切换,要理解其,先要知道上下文是什么,具体来说,一个线程被剥夺处理器的使用权而被暂停运行,就是“切出”;一个线程被选中占用处理器开始或者继续运行,就是“切入”。在这种切出切入的过程中,操作系统需要保存和恢复相应的进度信息,这个进度信息就是“上下文”了。至于系统开销具体发生在切换过程中的哪些具体环节,总结如下:
    操作系统保存和恢复上下文;
    调度器进行线程调度;
    处理器高速缓存重新加载;
    上下文切换也可能导致整个高速缓存区被冲刷,从而带来时间开销。以上情况过多都会耗费cpu资源,而你看到cpu资源利用率下降了是因为cpu已经做完了上下文切换,把线程的上下文保存到内存或者硬盘上去了,但是当你的线程重新唤醒,其cpu是不是又要多一次不必要的上下文切换?
    展开

    作者回复: 👍

    
     15
  • nightmare
    2019-06-28
    文件读写,socket网络编程,HeapByteBuffer,JNI都会涉及到系统调用
    
     6
  • 802.11
    2019-06-29
    刚才看copyonwrite的相关代码,很多地方用了数组拷贝,想问老师,是不是java api中所有带native关键字的方法都走了系统调用

    作者回复: 不一定,native方法只是表明java调用了c函数,c函数一定都调用了系统API

     2
     4
  • 802.11
    2019-06-29
    standservice这个例子中,虽然没有加在方法上,在方法里面加是解决了粒度的问题,但是加了3次和只在方法上加1次,系统调用层面上哪个更少哪个更多呢

    作者回复: JDK1.6 以后 对锁的实现引入了大量的优化,如偏向锁、轻量级锁、自旋锁、适应性自旋锁、锁消除、锁粗化等技术来减少锁操作的开销。

    其实就是避免每次synchronized操作都引起系统调用和上下文切换

     1
     4
  • Grubby🐑
    2019-06-29
    tomcat的startInternal方法,理论上不是应该只有一个线程去调用吗?为什么要加synchronized ?
     1
     2
  • ty_young
    2019-07-27
    老师,请问tomcat的http body延迟解析只是延迟解析或者不用到不解析,但是http的head和body是同时一次都读到内存的吧,能减少一次系统io调用么

    作者回复: 是分开读的

     2
     1
  • 不二
    2019-07-18
    Acceptor 线程组在等待连接建立的过程中,线程还是会阻塞吧?在跟客户端建立连接的这个阻塞有没有优化的方式

    作者回复: 是阻塞的,这里没有很大的必要去优化,因为accept调用仅仅是从操作系统的Tcp已连接队列中取出一个连接,很快的。

    
     1
  • -W.LI-
    2019-06-27
    老师好!那就是get请求没有body。使用get请求把参数放url上少一次系统调用?

    作者回复: 给你的思考点赞,url长度有限制,另外敏感数据不合适放url,否则是可以的。

    
     1
  • 正是那朵玫瑰
    2019-06-27
    老师有点疑问:
    1、线程阻塞或者等待会发生上下文切换,耗费cpu资源,线程阻塞或者等待不是会让出cpu吗,应该是浪费cpu资源才对啊?我在压测的时候发现当有大量的线程在await状态时,cpu的利用率立马下降,应该是浪费cpu资源的!老师说会耗费cpu资源 怎么理解呢?
    2、无锁固然是好的、但是无限重试是不是也会耗掉cpu资源,因为很多时候重试都是无用功!
     1
     1
  • 大魔王
    2020-01-04
    老师,apache tomcat 既然可以异步非阻塞了,那为什么在大并发下还是不如nginx强?网上说tomcat 是一个请求就创建一个进程是这样吗?
    
    
  • ty_young
    2019-12-15
    老师,tomcat的io和线程模型跟netty的是不是很像
    
    
  • 不想输,就别懒
    2019-12-06
    比如可以用细粒度的对象锁或者低强度的读写锁:对于这个问题,我想问下老师,如何从维度更好的把控它?需要多考虑哪些方面?
    
    
  • 锟铻
    2019-07-19
    Runtime.exec("shell"),这个是不是系统调用

    作者回复: shell是一个c语言程序,运行这个程序的过程中会有系统调用

    
    
  • Visual C++
    2019-07-07
    有其它优化方式吗
    
    
  • Visual C++
    2019-07-04
    Tomcat类加载机制触发的Too many open files问题

    如何解决?

    作者回复: 加大进程可打开的最大文件数限制

     1
    
  • 新世界
    2019-06-30
    文件和网络操作会调用系统API导致在内核和用户态切换
    
    
  • WL
    2019-06-27
    老师能不能指点一下在Http11Processor的service()中调用的Http11InputBuffer的parseHeaders()方法是怎么解析header的, 我今天看晕了, 没看懂是怎么将buffer中数据取出解析成header的

    作者回复: 建议你先了解一下“状态机”,这是一种设计模式。

    
    
  • 代码搬运工
    2019-06-27
    网络编程socket,输入输出流,创建线程thread,这些属于吧。
    
    
我们在线,来聊聊吧