博客
关于我
java进程、线程知识扩充
阅读量:298 次
发布时间:2019-03-03

本文共 908 字,大约阅读时间需要 3 分钟。

进程

1、一个进程至少得有一个线程,我们把这个线程称之为”主线程“

2、一个线程在默认情况下只有一个栈,位置在应用程序的进程地址空间中,而在内核中并没有栈,而是一个叫做线程内核对象的结构体,用来记录该线程的相关参数。

3、默认情况下,一个线程的栈要预留1M的内存空间,一个进程中可用的内存空间只有2G,所以理论上一个进程中最多可以开2048个线程。但是内存当然不可能完全拿来作线程的栈,所以实际数目要比这个值要小。

 

 

线程

一、线程概念

多线程的体现:硬盘、CPU、内存(一般操作都需要经过内存,如:复制粘贴)

1、  java的线程开启,默认的虚拟机会分配1M的内存,可以设置

2、Java进程可以启动的线程数可以通过如下公式计算:

(系统剩余内存 - 最大堆容量Xmx - 最大方法区容量MaxPermSize)/ 最大栈空间Xss这样,4G的服务器单个进程可以开多少线程,可以粗略计算出来,大概是5000个线程

3、一个http请求,就是一个线程。

 

二、tomcat中的线程,默认BIO

tomcat有两种请求方式

  1. 收到一个请求就处理,这个时候就不能处理新的请求,这种为阻塞
  2. 收到一个请求就新开一个线程去处理任务,主线程返回,继续处理下一个任务,这种为非阻塞。

 

  1. 线程池:但是不是每次收到请求就开一个新的线程,而是使用线程池;由于频繁创建、关闭数据库连接会消耗资源,所以会用数据库连接池来保存一定数量的连接,如果需要就从连接池里取连接,不需要则放回连接池,不在频繁创建。
  2. 基于Java NIO实现的服务器模型

    上面说到的几种模型,都是基于BIO(阻塞IO)。而NIO则是非阻塞IO,它是基于IO多路复用技术(例如Reactor模式)实现,只需要一个线程或者少量线程,就可以处理大量请求。从性能上来说NIO实现的服务器并发性一般大于BIO,所以可以实现高性能的服务器。如果感兴趣,可以学习一些基于NIO的网络编程框架,例如Netty、MINA。

    最后。Tomcat运行可以选择BIO或者NIO模型,原理分别对应上面的3和4两种方式。Tomcat默认是BIO方式运行,如果想要换成NIO,可以配置server.xml:

 

 

 

 

转载地址:http://vdwq.baihongyu.com/

你可能感兴趣的文章
Mybatis中的SQL语句等于、不等于和模糊查询的语法
查看>>
使用 github 搜索
查看>>
java有包名的类访问没有包名的类
查看>>
Python循环语句代码逐行详解:while、for、break和continue
查看>>
整型关键字的散列映射
查看>>
多位水仙花数-python(出现运行超时?不妨用减法计算)
查看>>
地下迷宫探索(后两个测试点无法通过?这里有你想要的答案)
查看>>
小白看完都会了!阿里云大师深入拆解Java虚拟机,看完这一篇你就懂了
查看>>
【IT之路】FAQ-Hibernate报错:表不存在
查看>>
VBA之正则表达式(19)-- 相对引用转绝对引用
查看>>
巧用VBA统一数字单位
查看>>
Transpose实现数组行列转置的限制
查看>>
[Golang]golang中自动锁的实现
查看>>
用float/double作为中转类型的“雷区”
查看>>
golang中interface的一些语法缺陷的改进
查看>>
vue-router路由 学习笔记
查看>>
数据结构与算法之栈
查看>>
【数据库】第七章课后题
查看>>
第四章 串、数组和广义表 —— BF算法和KMP算法
查看>>
[选拔赛1]花园(矩阵快速幂),JM的月亮神树(最短路),保护出题人(斜率优化)
查看>>