3. 技术专题

  • 线程执行结束或者一直占用CPU到100%时,有可能被kill掉,但线程池除外,可以一直活到重启。
  • 线程不知道自己什么时候会被挑中执行,这要看优先级、系统状况、CPU策略等
  • 线程随时可能被打断
  • 线程并非一直在运行状态执行到结束
    • 每个线程只在CPU上运行一段时间,到了时间然后就要让给别人用
    • 和CPU处理速度相比,数据库、文件、网络等操作有可能要慢几十万倍,不过考虑到CPU等的速度都是毫秒、纳秒计的,相对于用户感受到的秒级,一般还是可以接受的。
      • 因此当等待这边慢操作时,经常会先退出运行状态,等待他们发送事件来重新触发执行,当然也不一定会马上被CPU挑中执行
      • 因此也就尽量使用redis、memcache等来减少对数据库的访问
    • 以Java Web应用来说,每个请求就会对应一个线程,虽然一个线程不会一直占着CPU,CPU不会等着,但这个线程及其需要的一些资源却是一直被这个用户占着的,所以Java相对Node.js来说,还是比较费资源的。
  • 状态
    • 有等待、就绪、运行等状态,先到就绪状态才能再到运行状态
  • 优先级
    • 高的有可能会优先被CPU从就绪状态调度到运行状态
  • 死锁
    • 一定要按操作系统定下的统一的算法来判断锁资源的顺序(大小),然后按顺序加锁,避免循环等到导致死锁
原文地址:https://www.cnblogs.com/wyp1988/p/11896614.html