Java 采用 thread-per-task 的线程模型,即一个任务(一段代码)对应一个 Java 线程(thread),而一个 Java 线程对应一个操作系统线程,所以了解一些操作系统进程的管理知识可以更好的了解 Java 线程,下面以 Liunx 为例来分析 Java 线程

Liunx 的进程管理

Linux 中的进程(Process/Task)是正在执行的程序代码集合,是内核的最小资源调度单位,各个进程之间的资源相互隔离,Linux 通过虚拟处理器和内存,使得进程感觉自己在独享处理器和内存。而线程(Thread)是最小的计算单位,各个线程之间共享资源,理论上线程由进程产生,一个进程由若干线程组成。

Linux 中,内核不区分进程与线程,只不过使用不同的创建方式,进程由 fork() 或 exec() 系统调用创建,而线程由 clone() 系统调用创建,并且通过指定 clone 参数,与父进程共享内存空间,文件句柄,信号处理等(其本质还是进程)

POSIX thread (pthread) 的实现,在 2.6之前,Linux kernel 没有真正的 thread 支持,线程库都是通过 clone() 实现的。2.6 之后,由 NPTL(Native POSIX Thread Library) 实现,NPTL 除了使用 clone() 外,在内核中增加了 futex(fast userspace mutex) 用于支持处理线程之间的 sleep 与 wake。futex 是一种高效的对共享资源互斥访问的算法。NPTL是一个1×1 的线程模型,即一个用户线程对应一个内核进程。其他一些操作系统比如 Solaris 则是 MxN 的,M 对应创建的线程数,N 对应内核可以运行的实体。NPTL 创建线程的效率非常高。一些测试显示,基于 NPTL 的内核创建 10 万个线程只需要 2 秒,而没有 NPTL 支持的内核则需要长达 15 分钟

进程的数据结构

一个进程由结构 task_struct 表示,各进程通过双向列表联系起来,创建进程时由内核为 task_struct 分配内存(32bit 下为 1.7KB ),Linux 使用 PID 标识进程 ,其最大值决定了某一时刻系统最大的并发进程的数量

进程的状态迁移

process state

进程的创建与销毁

fork() // or exec(), clone()

wait4()

exit()

无论是 fork() 还是 exec(),都是通过调用 clone() 实现的,clone() 会调用 do_fork() 完成进

java 线程的销毁_Java 线程(1)- 创建与销毁相关推荐

  1. java 线程池数量_java线程池及创建多少线程合适

    java线程池 1.以下是ThreadPoolExecutor参数完备构造方法: public ThreadPoolExecutor(int corePoolSize,int maximumPoolS ...

  2. java io密集型任务_Java线程池讲解——针对IO密集型任务

    sap java开发技术详解&mdash基础 94.01元 (需用券) 去购买 > 针对 IO 密集型的任务,我们可以针对原本的线程池做一些改造,从而可以提高任务的处理效率. 基本 在阿 ...

  3. java线程池概念_Java 线程池概念、原理、简单实现

    线程池的思想概述 我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结東了,这样频繁创建线程就会大大降低系 ...

  4. java线程池功能_Java线程池总结

    一.线程池 线程池适合处理的任务:执行时间短.工作内容较为单一. 合理使用线程池带来的好处: 1)降低资源消耗:重复利用已创建的线程降低线程创建和销毁造成的开销 2)提高响应速度:当任务到达时,任务可 ...

  5. java 同步转并行_Java线程与并行编程(二)

    你好,我是goldsunC 让我们一起进步吧! 线程的控制与同步 线程的状态与生命周期 '每个Java程序都有一个默认的主线程,想要实现多线程,必须在主线程中创建新的线程对象.新建的线程在它的一个完整 ...

  6. java方法生命周期_Java线程的第二种实现方式以及生命周期

    上篇中我们了解了Java线程的第一种实现方式,主要分两步,第一步是继承java.lang.Thread; 第二步是重写run()方法.接下来我们来看Java线程的第二种实现方式,也是分为两步,第一步, ...

  7. java 线程 状态 图_Java线程中的生命周期和状态控制图文详解

    这篇文章主要介绍了Java线程的生命周期和状态控制,需要的朋友可以参考下 一.线程的生命周期 线程状态转换图: 1.新建状态 用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于 ...

  8. java assert使用场景_Java线程池的四种用法与使用场景

    一.如下方式存在的问题 new Thread() { @Override public void run() { // 业务逻辑 }}.start(); 1.首先频繁的创建.销毁对象是一个很消耗性能的 ...

  9. java 线程栈空间_java线程的内存不包含在JVM堆与栈中

    Java代码   publicclassMaxThreadsTest { publicstaticvoidmain(String[] args) { while(true) { newThread(n ...

最新文章

  1. 电子工程与计算机科学的读后感,读后感-相关博文 - 电子工程世界-论坛
  2. 样条表示---样条表示之间的转换
  3. 单例模式懒汉式(线程安全写法)
  4. 【大总结3】leetcode解题总览(算法、剑指offer、SQL、多线程、shell)
  5. 80×60长40米的地笼_石家庄Q345矩形方管 220*80*8方管 华东地区
  6. EJB3.0学习笔记---MDB--第一个MDBBean程序:
  7. 用dsp的c54x汇编语言编写4位数的按位输出和计算,DSP实验三实验四(精).doc
  8. 架构篇:大型分布式Web系统的架构演进
  9. 编码基本功:类成员要加前缀,这样可以避免同名变量
  10. 嵌入式接口之GPIO驱动LED的实验(附完整代码和工程以及详细的调试过程)
  11. A visual proof that neural nets can compute any function
  12. 多子群的共生非均匀高斯变异樽海鞘群算法-附代码
  13. UML需求分析步骤实例解析
  14. 如何找回bilibili(b站)收藏夹里失效的视频?
  15. mac android手机调试,mac 无法连接android手机进行调试 解决方案
  16. 一个应届毕业生的求职回忆录(指引道路)
  17. 软件测试Python编程基础学习分享
  18. 如何将 APE 无损音乐转换成 FLAC音频文件
  19. JavaEE 企业级分布式高级架构师(十七)ElasticSearch全文检索(1)
  20. c语言实现定积分运算

热门文章

  1. YUI 3 学习资源
  2. 【转】Go语言---strings包(字符串操作)
  3. 【英语面试】自我介绍篇
  4. Matlab 命令大全
  5. 关于伪原创 各类伪原创对比分析
  6. css中font-family和font-style的区别
  7. 【Kaggle】AMEX信用违约预测比赛总结
  8. 初级软件测试面试题哪里可以刷?新发现的这个在线题库,值得一试
  9. 03.项目管理实践工具-质量审计
  10. android radiobutton 监听事件,RadioButton监听事件